Entrenando una red neuronal para el tiro con arco

En ocasiones se me ocurren ejemplos divertidos para mostrar cómo podemos utilizar el Machine Learning para ciertas finalidades.

En este caso se me ha ocurrido que le podemos enseñar a nuestra red neuronal a disparar con arco y dar con bastante precisión a un blanco a muchos metros de distancia. (puede ser realmente útil para cuando llegue el apocalipsis zombie :P )

Para ello, he creado un par de vídeos donde explico paso a paso cómo crear los datos necesarios, entrenar la red neuronal, comprobar su efectividad y mostrar de una forma visual los datos para su análisis.

Primera parte:

Segunda parte:

Y como de costumbre, he publicado el código en mi cuenta de GitHub:
Entrenando una red neuronal con lanzamiento parabólico

Enseñando matemáticas a una red neuronal

He vuelto a dedicarle un rato de mis noches de insomnio a preparar un vídeo donde muestro cómo se puede entrenar una red neuronal (MLP) para enseñarle matemáticas simples en Python. En el vídeo puedes ver como la red neuronal aprende a sumar, restar, multiplicar y dividir en pocos minutos.

Es una pequeña demostración, el resultado no es ni preciso ni usable en ningún caso práctico (al menos a mi no se me ocurre ninguno), es sólo una forma de compartir la experiencia para que podáis ver lo sencillo que es empezar a hacer vuestros pinitos con el Machine Learning.

Puedes ver el resultado del código creado en mi cuenta de GitHub, en el repositorio que he llamado Neural Network aprendiendo Matemáticas.

¿Que te ha parecido? ¿Se te ocurre alguna idea interesante para el próximo vídeo? ;)

Entrenando una red neuronal en Python

Mucha gente cree que utilizar el Machine Learning para resolver problemas cotidianos es muy complicado, pero no es del todo cierto, en realidad conociendo algunas herramientas en poco rato se puede tener en marcha un sistema que aprenda a dar respuesta a un problema y se adapte con el tiempo para mejorar su precisión.

He creado un pequeño juego de Piedra Tijeras Papel para enseñar a una red neuronal (muy simple, sin hacer ningún tipo de configuración y “fine tuning”) y mostrar cómo la red neuronal aprende poco a poco y mejora con cada iteración su precisión.

El vídeo está hecho de madrugada, así que espero que sepáis perdonar mi lentitud a la hora de detectar los fallos que yo mismo voy cometiendo durante la creación del código.

¿Que te ha parecido? ¿Has conseguido llegar hasta el final sin dormirte?

Update: He subido el Notebook a mi cuenta de GitHub con el nombre PiedraTijerasPapel – LIVE

Soluciones para bases de datos grandes

Uno de los retos que sueles encontrarte en el mundo de las bases de datos a nivel técnico es que sean capaces de almacenar muchos millones de documentos (filas) y a la vez sean capaces de encontrar el resultado (una aguja en un pajar) en muy pocos milisegundos.

Si tienes un proyecto pequeño y una base de datos que se maneja en gigas de datos, las soluciones son sencillas de implementar. Con algunos ajustes en la capa de aplicación (si los puedes meter) y alguna que otra capa de cache, tu base de datos rejuvenece unos cuantos años.

Si la base de datos ya es de un tamaño considerable y hablamos de teras de información, es probable que ya tengas oídos los términos como cluster, sincronización, maestro y esclavos, además de las expresiones “necesitamos más disco”, “el backup va muy lento” o “¿puedo tener una copia en local?” que pueden hacerte perder la cabeza por momentos.

Dependiendo del proyecto, puedes apoyarte en la arquitectura, gastando un buen montón de euros adicionales para mejorar la respuesta de tus bases de datos.

Pero, si no dispones de presupuesto para montar un Oracle Exadata y Oracle Coherence (por poner un ejemplo famoso) y tu proyecto puede aprovecharse de una base de datos NoSQL, es muy interesante que le pegues un vistazo a MongoDB.

Con MongoDB puedes crear de forma muy sencilla una plataforma que puede crecer tanto en redundancia (ReplicaSet) como en almacenamiento (Sharding), manteniendo siempre un muy buen nivel de capacidad de respuesta.

La configuración es bastante sencilla y amigable. Entrar a nivel de detalle de configuración te llevará muy poco tiempo y podrás hilar muy fino (si tu proyecto lo requiere) para configurar y adaptar las máquinas de bases de datos a tus necesidades. Con pocos euros, obtendrás unos resultados que pocos te podrán discutir.

Para medir esos resultados no hace falta que montes un Munin o un Ganglia que muestre las gráficas típicas que te dan mucha información interesante de un simple vistazo. Puedes utilizar el servicio de MongoDB Management Service (MMS) para ello. Instalando un simple agente en tus nodos, en pocos minutos tendrás toda una lista de gráficas muy completas que mostrarán información ordenada de que está ocurriendo con tu base de datos.

MongoDB Management Service

En la captura de arriba se pueden ver las gráficas de un par de nodos de un ReplicaSet. En el MMS puedes organizar uno o más tableros donde colocar las gráficas que te interesan para cada cosa concreta, haciéndote la vida más fácil si necesitas ver el estado de tu granja de servidores de base de datos de un vistazo.

Yo he implementado MongoDB + MMS ya en bastantes nodos de distintos proyectos y entornos productivos. La ventaja de tener en muy poco tiempo toda una solución compleja de base de datos lo convierte en un producto muy, muy, muy interesante para proyectos donde se trabaje con grandes cantidades de datos.

¿Todavía no lo has probado? ;)

Nuevo cambio de ciclo profesional

Cuando decidí irme a trabajar como administrador de sistemas a una gran empresa, no sabía muy bien que me esperaba, lo que sí que tenía muy claro es que sería una experiencia muy interesante a la que sacarle mucho jugo.

Así ha sido, he disfrutado trabajando con grandes personas, he profundizado en mis conocimientos de administración de GNU/Linux, arquitectura, comunicaciones y me he familiarizado con mucho software “privativo” (en muchos aspectos, no sólo el económico).

No obstante, en los últimos meses no he parado de plantearme dejar la empresa, ya que había llegado a un punto en que la empresa poco podía aportarme (más que euros) y yo me encontraba con un muro cada vez que quería aportar algo más a la empresa. Una pena que los temas “políticos” de jefes, medallas y verdades maquilladas enturbie el trabajo de gente muy buena que intenta hacer lo mejor que le dejan las cosas.

Por lo tanto y tras agotar todos los cartuchos, decidí abandonar la empresa. Algo que tengo que reconocer que me ha sentado realmente bien. He vuelto a tener esas ganas de hacer cosas, de investigar, de ver un poco más allá. ¡Si hasta he vuelto a programar por puro placer!.

Además, he tenido la suerte de, sin apenas comentarlo con nadie, recibir varias ofertas de trabajo muy interesantes de las cuales ya he cerrado el trato con una que me apetece mucho. Me apetece de nuevo volver a volcarme en el mundo del software libre, que aunque nunca quise abandonar, reconozco que he ido dejando un poco de lado estos años. Me apetece volver a coger nuevos proyectos con ganas, desde el principio, explotando todo el potencial que sea capaz de sacar de las herramientas de las que dispongo y convertirlo de una simple idea en algo productivo, eficiente e incluso rentable. :)

De modo que ya me estoy poniendo el “chip” de productividad y eficiencia de nuevo, mientras voy dejando que mi cerebro vaya recordando de estos últimos años sólo las cosas que merece la pena recordar. Las personas, los proyectos realizados, los errores que nunca volveré a cometer, las risas y los cafés.

De nuevo un cambio de ciclo en mi vida profesional. En los últimos años en el sector informático (y no son pocos), cada cambio de ciclo me ha aportado mucho, muchísimo, mejorando mis conocimientos y mi forma de afrontar (o generar) el trabajo de una forma cada vez mejor. Así que espero que este nuevo ciclo sea más de lo mismo, mejorar un poco más en todas las áreas que pueda.

Algunas de las fotos de esos buenos momentos las dejo en este set de fotos de mi cuenta de Flickr.

Ya tengo ganas de empezar el primer día de mi nuevo ciclo. Me llevo puesto los buenos ratos con la gente con la que he trabajado. ¿Se acordarán ellos de mi? ;)