Skip to main content

Introducción a brain.js: Librería de redes neuronales en JavaScript

inteligencia artificial

Autor: Reynaldo Navedo

Publicado: Actualizado:

Contenido

  • Instalación
  • Primeros Pasos: Sumar Dos Números
  • Clasificación de Colores
  • Procesamiento de Texto


Instalación

Instalar Brain.js es tan fácil como ejecutar un comando NPM, no olvides inicializar node:

npm init -y
npm install brain.js 


Primeros Pasos: Sumar Dos Números

Vamos a comenzar con un ejemplo sencillo, donde entrenaremos a nuestra red para sumar dos números.

const brain = require('brain.js'); 
const net = new brain.NeuralNetwork(); 

// Entrenamiento
net.train([ 
  { input: [0, 0], output: [0] }, 
  { input: [0, 1], output: [1] }, 
  { input: [1, 0], output: [1] }, 
  { input: [1, 1], output: [2] } 
]); 

// Predicción 
const output = net.run([1, 0]);
 
// Devuelve [1] (cercano a 1) 
console.log(`Predicción: ${output}`);

Este código se explica de la siguiente manera:


Está utilizando la biblioteca `brain.js` para crear una red neuronal y entrenarla para hacer predicciones basadas en datos de entrada, puedes leer más sobre este ejemplo en la documentación de Brain.js. Aquí te explico lo que está sucediendo:


  1. La primera línea importa la biblioteca `brain.js` y la asigna a una variable constante llamada `brain`.
  2. La segunda línea crea una nueva instancia de red neuronal y la asigna a una variable llamada `net`.
  3. Se llama al método `net.train()` con un array de datos de entrenamiento. Cada objeto en el array representa un conjunto de valores de entrada y salida que la red neuronal utilizará para aprender. En este caso, los valores de entrada son arrays de dos números (0 o 1) y los valores de salida son arrays de un número (0, 1 o 2). La red neuronal utilizará estos datos para aprender a predecir el valor de salida correcto en función de un valor de entrada dado.
  4. Después de que la red neuronal ha sido entrenada, se llama al método `net.run()` con un array de valores de entrada. En este caso, los valores de entrada son `[1, 0]`.
  5. El valor de salida predicho se asigna a una variable llamada `output`.
  6. Finalmente, el valor de salida predicho se registra en la consola usando `console.log()`.


En resumen, este código crea una red neuronal utilizando la biblioteca Brain.js, la entrena con algunos datos de entrada/salida, y luego la utiliza para hacer una predicción basada en algunos valores de entrada. Ahora veamos otro ejemplo básico de clasificación de colores claros u oscuros.


Clasificación de Colores

Subamos un nivel y creemos un clasificador de colores. Determinaremos si un color es más probable que se perciba como "claro" o "oscuro".

const net = new brain.NeuralNetwork();

net.train([
  { input: { r: 0.03, g: 0.7, b: 0.5 }, output: { oscuro: 1 } },
  { input: { r: 0.16, g: 0.09, b: 0.2 }, output: { claro: 1 } },
  { input: { r: 0.5, g: 0.5, b: 1.0 }, output: { claro: 1 } },
]);

const output = net.run({ r: 1, g: 0.4, b: 0 }); // { claro: 0.99, oscuro: 0.002 }

En este ejemplo, el resultado será un objeto con las probabilidades de que el color de entrada sea "claro" o "oscuro".


Este código está utilizando la biblioteca `brain.js` para crear una red neuronal y entrenarla para hacer predicciones basadas en datos de entrada. Aquí te explico lo que está sucediendo:


  1. La primera línea importa la biblioteca `brain.js` y la asigna a una variable constante llamada `brain`.
  2. La segunda línea crea una nueva instancia de red neuronal y la asigna a una variable llamada `net`.
  3. Se llama al método `net.train()` con un array de datos de entrenamiento. Cada objeto en el array representa un conjunto de valores de entrada y salida que la red neuronal utilizará para aprender. En este caso, los valores de entrada son objetos con propiedades `r`, `g`, `b` (representando los componentes de color rojo, verde y azul) y los valores de salida son objetos con una propiedad `dark` o `light` (representando si el color es oscuro o claro).
  4. Después de que la red neuronal ha sido entrenada, se llama al método `net.run()` con un objeto de valores de entrada. En este caso, los valores de entrada son `{ r: 0.7, g: 0.6, b: 0.5 }`.
  5. El resultado de la predicción se asigna a una variable llamada `result`.
  6. Finalmente, el resultado de la predicción se registra en la consola usando `console.log()`.


Este código crea una red neuronal, la entrena con algunos datos de entrada/salida, y luego la utiliza para hacer una predicción si el color es claro u oscuro basada en algunos valores de entrada.


Procesamiento de Texto para identificar sentimientos de palabras

Vamos a probar algo más avanzado: el procesamiento de texto para el análisis de sentimientos. En esta sección vamos a crear una red neuronal y la vamos a entrenar con una interfaz de usuario.


Sigamos los siguientes pasos:


Paso #1 - Inicialicemos `npm` con la bandera `-y` para aceptar todos los valore por defecto:

npm init -y


Paso #2 - Instalemos express.js y brain.js

npm i express brain.js


Paso #3 - Instalemos `json-server` y `nodemon` para simular una base de datos donde estaremos añadiendo la data para entrenar nuestra red neuronal. Nodemon lo utilizaremos para recargar node cada vez que hagamos un cambio al código de servidor.

npm i -g json-server nodemon


Paso #4 - Creemos el directorio necesario

  • db/data.json - esta es la data que utilizaremos más adelante
  • public/ - los documentos de acceso público estarán aquí
  • /index.html - aquí tendremos la interfaz para entrenar la red
  • /css/styles.css - hojas de estilos para la interfaz
  • /js/script.js - javascript para interactuar con la interfaz y base de datos para entrenar la red
  • server.js - el código de servidor que responderá si un sentimiento es bueno o malo, basado en nuestro entrenamiento a la red neuronal.


Paso #5 - Visita el repositorio de este tutorial en GitHub para popular todos los documentos e iré explicando el código.


Comencemos con el lado del cliente donde tenemos la interfaz de usuario. Explicaré el siguiente código:

const brain = require('brain.js');
const net = new brain.recurrent.LSTM();

// Entrenamiento
net.train([
  { input: 'Me siento increíble', output: 'bueno' },
  { input: 'Me siento súper', output: 'bueno' },
  { input: 'Me siento satisfecho', output: 'bueno' },
  { input: 'Me siento abusado', output: 'malo' },
  { input: 'Me siento frustrado', output: 'malo' },
  { input: 'Me siento cansado', output: 'malo' },
], {
  iterations: 1000,
  log: true
});

// Predicciones
const outputPositivo = net.run('cansado');
const outputNegativo = net.run('frustrado');

// Devuelve positivo y negativo respectivamente
console.log(`Sentimiento Positivo: ${outputPositivo}`); //bueno
console.log(`Sentimiento Negativo: ${outputNegativo}`); //malo

La red es capaz de clasificar una frase según el sentimiento que expresa, ya sea bueno o malo, dependiendo de la palabra que utilicemos para probar nuestro entrenamiento. El objeto de opciones que pasamos en `net.train` utiliza 1,000 iteraciones y en la consola tenemos un trazo de las iteraciones. Aquí más detalles:


Se llama al método `net.train()` con un array de datos de entrenamiento. Cada objeto en el array representa un conjunto de valores de entrada y salida que la red neuronal utilizará para aprender.


  1. Los valores de entrada son frases en español que representan opiniones o comentarios sobre un producto o servicio. Los valores de salida son etiquetas de 'positivo' o 'negativo', que representan el sentimiento general de la frase de entrada.
  2. La red neuronal utilizará estos datos para aprender a predecir si una frase dada tiene un sentimiento generalmente positivo o negativo.


En resumen, este código está entrenando a una red neuronal para realizar análisis de sentimientos dfe palabras en español. Mira mi tutorial en video en mi canal de YouTube para más detalles.


Conclusión

Brain.js hace que el aprendizaje automático sea accesible y divertido para los desarrolladores de JavaScript. Desde simples sumas hasta procesamiento de texto, las posibilidades son infinitas. Así que, ¿qué esperas? ¡Atrévete a sumergirte en el mundo de las redes neuronales y desata el poder del aprendizaje automático en tus proyectos!


Espero que este artículo te haya dado el empujón que necesitabas para empezar. ¡Hasta la próxima!

Comparte este contenido