ia – Constancy https://constancy.com.ar/wp Creatividad e innovación Mon, 26 Jul 2021 17:40:58 +0000 es hourly 1 https://wordpress.org/?v=5.5.14 https://constancy.com.ar/wp/wp-content/uploads/2020/08/cropped-100-1-32x32.png ia – Constancy https://constancy.com.ar/wp 32 32 Creación de redes neuronales en PHP https://constancy.com.ar/wp/2021/07/26/creacion-de-redes-neuronales-en-php/ https://constancy.com.ar/wp/2021/07/26/creacion-de-redes-neuronales-en-php/#comments Mon, 26 Jul 2021 17:37:47 +0000 https://constancy.com.ar/wp/?p=221 Una red neuronal artificial (o ANN) es un algoritmo utilizado en inteligencia artificial para simular el pensamiento humano. La red funciona de manera similar al cerebro humano: está compuesta por neuronas que se comunican entre sí y proporcionan resultados valiosos. Aunque es solo un modelo, y ni siquiera se acerca al pensamiento humano, las redes neuronales artificiales se han utilizado en sistemas de predicción, clasificación y soporte de decisiones, así como en el reconocimiento óptico de caracteres y muchas otras aplicaciones.

Las redes neuronales artificiales se desarrollan principalmente en lenguajes de programación de alto nivel como C o C ++, pero también puede implementar redes neuronales en PHP, que es quizás la forma más conveniente de usar la inteligencia artificial en aplicaciones web. En este artículo, explicaré cómo configurar una de las topologías de redes neuronales más comunes, la percepción de múltiples capas, y crear su primera red neuronal en PHP utilizando una clase de red neuronal PHP (ver).

Similar al proceso de pensamiento humano, una red neuronal:

  1. recibe alguna entrada (sus datos)
  2. lo analiza y lo procesa
  3. proporciona un valor de salida (es decir, el resultado del cálculo)

Es por eso que la topología en este ejemplo (percepción multicapa) tiene tres capas:

  • Capa de entrada
  • capa oculta
  • capa de salida

Cada capa tiene una cierta cantidad de neuronas, según sus necesidades. Cada neurona está conectada a todas las neuronas de la siguiente capa. Las neuronas procesan la tarea dada ajustando la salida (es decir, los coeficientes de peso entre ellas). Por supuesto, antes de que se puedan aplicar a un caso de uso práctico, las redes neuronales deben aprender la tarea. Pero, antes que todo, tienes que preparar tus datos para la red.

Entrada de red neuronal en PHP: preparación de datos

Debido a que las redes neuronales son modelos matemáticos complejos, no puede enviar cualquier tipo de datos a las neuronas de entrada. Los datos deben normalizarse antes de que la red pueda utilizarlos. Esto significa que los datos deben escalarse en el rango de -1 a 1. Desafortunadamente, no hay una función de normalización en PHP, por lo que tendrá que hacerlo usted mismo, pero le daré la fórmula:

I = Imin + (Imax-Imin)*(D-Dmin)/(Dmax-Dmin)

Donde IminImaxrepresentan el rango de la red neuronal (-1 a 1), y DminDmaxson los valores mínimo y máximo de los datos.

Después de normalizar los datos, debe elegir el número de neuronas de entrada. Por ejemplo, si tiene colores RGB y desea determinar si el rojo o el azul es un color dominante, tendría cuatro neuronas de entrada (tres neuronas para mantener los valores rojo, verde y azul, y la cuarta es el sesgo, que generalmente equivale a 1). . Aquí está el código PHP para este cálculo:

<?php
require_once("class_neuralnetwork.php");
$n = new NeuralNetwork(4, 4, 1);  // the number of neurons in each layer of the network -- 4 input, 4 hidden and 1 output neurons 
 $n->setVerbose(false); // do not display error messages
//test data
// First array is input data, and the second is the expected output value (1 means blue and 0 means red)
 $n->addTestData( array (0, 0, 255, 1), array (1));
  $n->addTestData( array (0, 0, 192, 1), array (1));
  $n->addTestData( array (208, 0, 49, 1), array (0));
  $n->addTestData( array ( 228,  105, 116, 1), array (0));

  $n->addTestData( array (128, 80, 255, 1), array (1));
  $n->addTestData( array ( 248,  80, 68, 1), array (0));
?>

Solo hay una neurona de salida porque solo tiene dos resultados posibles. Para problemas más complejos, puede utilizar más de una neurona como salida de red, por lo que tiene muchas combinaciones de 0 y 1 como salidas posibles.

Entrenamiento de una red neuronal en PHP

Antes de poder resolver el problema, la red neuronal artificial debe aprender a resolverlo. Piense en esta red como una ecuación. Ha agregado datos de prueba y la salida esperada, y la red tiene que resolver la ecuación encontrando la conexión entre la entrada y la salida. Este proceso se llama entrenamiento. En las redes neuronales, estas conexiones son pesos neuronales. Se utilizan algunos algoritmos para el entrenamiento de la red, pero la propagación hacia atrás se utiliza con mayor frecuencia. La propagación hacia atrás en realidad significa la propagación hacia atrás de los errores.

Después de inicializar pesos aleatorios en la red, los siguientes pasos son:

  1. Recorrer los datos de la prueba
  2. Calcule la salida real
  3. Calcule el error (salida deseada – salida de red actual)
  4. Calcule los pesos delta al revés
  5. Actualizar los pesos

El proceso continúa hasta que todos los datos de prueba se hayan clasificado correctamente o el algoritmo haya alcanzado un criterio de parada. Por lo general, el programador intenta enseñar a la red un máximo de tres veces, mientras que el número máximo de rondas de entrenamiento (épocas) es 1000. Además, cada algoritmo de aprendizaje necesita una función de activación. Para la propagación hacia atrás, la función de activación es tangente hiperbólica ( tanh)

Veamos cómo entrenar una red neuronal en PHP:

 

<?php
$max = 3;
// train the network in max 1000 epochs, with a max squared error of 0.01
while (!($success=$n->train(1000, 0.01)) && $max–>0) {
// training failed — re-initialize the network weights
$n->initWeights();
}

//training successful
if ($success) {
$epochs = $n->getEpoch(); // get the number of epochs needed for training
}
?>

 

El error cuadrático medio ( mse ) es el promedio de los cuadrados de los errores, que también se conoce como desviación estándar. El valor del error cuadrático medio predeterminado suele ser 0.01, lo que significa que el entrenamiento es exitoso si el error cuadrático medio es menor que 0.01.

Antes de ver el ejemplo funcional de una red neuronal artificial en PHP, es una buena práctica guardar su red neuronal en un archivo o una base de datos SQL. Si no lo guarda, deberá realizar el entrenamiento cada vez que alguien ejecute su aplicación. Las tareas simples se aprenden rápidamente, pero la capacitación lleva mucho más tiempo para problemas más complejos y desea que sus usuarios esperen lo menos posible. Afortunadamente, hay funciones de guardar y cargar en la clase PHP en este ejemplo :

<?php
$n->save('my_network.ini');
?>

Tenga en cuenta que la extensión del archivo debe ser .ini .

El código PHP para nuestra red neuronal

Veamos el código PHP de la aplicación de trabajo que recibe valores de rojo, verde y azul y calcula si el color azul o rojo es dominante:

<?php
require_once("class_neuralnetwork.php");
$r = $_POST['red'];
$g = $_POST['green'];
$b = $_POST['blue'];

$n = new NeuralNetwork(4, 4, 1); //initialize the neural network
$n->setVerbose(false);
$n->load('my_network.ini'); // load the saved weights into the initialized neural network. This way you won't need to train the network each time the application has been executed

$input = array(normalize($r),normalize($g),normalize($b));  //note that you will have to write a normalize function, depending on your needs

$result = $n->calculate($input);
If($result>0.5) {
// the dominant color is blue
}
else {
// the dominant color is red
}
?>

Limitaciones de la red neuronal

La principal limitación de las redes neuronales es que solo pueden resolver problemas linealmente separables y muchos problemas no son linealmente separables. Por lo tanto, los problemas separables no linealmente requieren otro algoritmo de inteligencia artificial. Sin embargo, las redes neuronales resuelven suficientes problemas que requieren inteligencia informática para ganarse un lugar importante entre los algoritmos de inteligencia artificial.

]]>
https://constancy.com.ar/wp/2021/07/26/creacion-de-redes-neuronales-en-php/feed/ 182