En este artículo te muestro como hacer tu primera red neuronal, sin tener conocimientos previos de Inteligencia Artificial, y sin necesidad de instalar nada en tu equipo. «Tu primer Hola Mundo Machine Learning».
Los requisitos son:
- Un editor de texto
- Un Navegador (Firefox, Chrome, Edge, etc.)
- Conexión a internet.
Vamos alla:
Vamos a crear un fichero html con nuestro editor favorito por ejemplo notepad.
El fichero lo vamos a denominar «hola mundo machine learning.html»
Este fichero una vez completado lo vamos a abrir con nuestro navegador favorito: Firefox, Chrome, Edge, etc.
El objetivo es mostrar un formulario y usar una red neuronal para sumar dos números.
No suena muy emocionante, pero esta aplicación es un «Hola Mundo» lo de menos es la funcionalidad, lo importante es que vamos a usar nuestra primera red neruronal para resolver el problema.
La red neuronal la vamos a entrenar con cinco sumas ( 1 + 0 = 1, 2 + 1 = 3, 1 + 4 = 5, 6 + 1 = 7, 4 + 4 = 8) y tendrá que inferir nuevas sumas por ejemplo 2 + 5, 3 + 4, que le podremos preguntar mediante un formulario.
El fichero está escrito en html y javascript, y la librería de machine learning que utiliza es brain.js
<!DOCTYPE html> <html> <head> <title>Hola Mundo Machine Learning</title> <style type="text/css"> #cuadro { padding: 2rem; font-size: 4rem; margin-left: 15rem; } </style> <style type="text/css"> #cuadro2 { padding: 2rem; font-size: 1rem; margin-left: 15rem; } </style> </head> <body> <div id="cuadro"> Hola Mundo Machine Learning </div> <div id="cuadro2"> <p>Vamos a sumar dos números menores que 10:</p> <input id="numero1"><br> <input id="numero2"> <button type="button" onclick="miFuncionSuma()">Sumar</button> <p id="resultado"></p> </div> <script src="https://unpkg.com/brain.js"></script> <script type="text/javascript"> function miFuncionSuma() { var x,y,suma,text; x = document.getElementById("numero1").value; y = document.getElementById("numero2").value; if (isNaN(x) || isNaN(y)) { text = "Es necesarios introducir dos números válidos"; } else { if (x > 9 || y > 9) { text = "Los números deben de ser menores que 10"; } else { suma=sumaMachineLearning(x,y) text= suma; } } document.getElementById("resultado").innerHTML = text; } function sumaMachineLearning(x,y) { //Inicializar red neuronal var redneuronal = new brain.NeuralNetwork(); // Entrenar la red neuronal redneuronal.train ([ {input: {cifra1: .1, cifra2: 0}, output: {suma: .1}}, {input: {cifra1: .2, cifra2: .1, }, output: {suma: .3}}, {input: {cifra1: .1, cifra2: .4}, output: {suma: .5}}, {input: {cifra1: .6, cifra2: .1}, output: {suma: .7}}, {input: {cifra1: .4, cifra2: .4}, output: {suma: .8}}, ]); console.log(x); console.log(y); e1 = x/10; e2 = y/10; console.log(e1); console.log(e2); var entrada = { cifra1: e1, cifra2: e2, }; //Obtener la prediccion de la red var r = redneuronal.run(entrada); console.log(r); // redondear el resultado resultado = Math.round(r.suma*10); console.log(resultado); salida = resultado; return salida; } </script> </body> </html>
Esta es la pantalla de la aplicación:
Si queremos sumar 2 + 3, que es un valor que no está en los datos de entrenamiento.
¡¡¡Da 5!!!, veamos como lo hace la red neuronal.
El código contiene la definición del formulario y el código javascript para filtrar los parámetros, pero nos vamos a centrar en la función sumaMachineLearning(x,y) que es donde se emplea la red neuronal.
function sumaMachineLearning(x,y) { //Inicializar red neuronal var redneuronal = new brain.NeuralNetwork(); // Entrenar la red neuronal con cinco sumas redneuronal.train ([ {input: {cifra1: .1, cifra2: 0}, output: {suma: .1}}, {input: {cifra1: .2, cifra2: .1, }, output: {suma: .3}}, {input: {cifra1: .1, cifra2: .4}, output: {suma: .5}}, {input: {cifra1: .6, cifra2: .1}, output: {suma: .7}}, {input: {cifra1: .4, cifra2: .4}, output: {suma: .8}}, ]); console.log(x); console.log(y); e1 = x/10; e2 = y/10; console.log(e1); console.log(e2); var entrada = { cifra1: e1, cifra2: e2, }; //Obtener la prediccion de la red var r = redneuronal.run(entrada); console.log(r); // redondear el resultado resultado = Math.round(r.suma*10); console.log(resultado); salida = resultado; return salida; }