Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Red Neuronal de Matlab Con Arduino

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 5

Red Neuronal en Matlab y Arduino.

Objetivo

Diseñar una red neuronal que simule una compuerta XOR e implementarla en una placa de
Arduino.

Paso 1: Matlab

En Matlab, primero obtendremos los “pesos (w)” y “bias (b)” que se utilizarán para crear una
red neuronal de dos capas y tres neuronas mostrada en la siguiente figura.

Donde:

p1 y p2 son las entradas de la red neuronal.

w son los pesos de las entradas de la neurona.

b son las bias. El sesgo que controla que tan predispuesta esta la neurona a
disparar un 1 o 0 independiente de los pesos.

f(n) son las funciones

n son las salidas.

Vamos a crear la matriz p en Matlab que tendrá las entradas de las compuertas y la matriz t
que tendrá los valores de salida para realizar el entrenamiento de la red neuronal.

Ahora declaramos una variable para nuestra red “net” y con el comando newff vamos a
realizar el entrenamiento con retro propagación.
Donde:

newff(minmax(p): para entrenamiento con retro propagación con esas entradas.

[2 1] : Es el número de neuronas en la primer capa y la segunda cada.

{'tansig','purelin'} : Funciones de activación para la primer y segunda capa.

'traincgf' : Método de entrenamiento para la red neuronal.

El programa completo para cargar en Matlab sería:


%-------------------------------------------
clc, clear all,
p=[0 0 1 1;
0 1 0 1];
t=[0 1 1 0];

net=newff(minmax(p),[2 1],{'tansig','purelin'},'traincgf');
net=init(net);
net.trainParam.epochs=500;
net.trainParam.goal=1e-6;
net=train(net,p,t);
a=sim(net,p)

pesos1=net.iw{1,1}
bias1=net.b{1,1}
pesos2=net.lw{2,1}
bias2=net.b{2,1}
%-------------------------------------------

La descripción del programa es el siguiente:


Corremos el programa y podemos ver que se resuelven los valores de pesos y bias en 22
interacciones (Epoch) de las 500.

Vemos los resultados en la ventana de comandos de Matlab.


Una vez que se tienen los pesos y las bias se puede crear la red neural en Arduino para simular
en funcionamiento.

Paso 2: Arduino

En el siguiente esquema, se presenta también de forma general la red neuronal a crear, donde
se puede ver las funciones que se aplican entre neuronas (tansig) y la función que se utiliza
para la salida (lineal).

El programa en Arduino para copiar es el siguiente, en el cual las entradas son los puertos 7 y 8
de Arduino y la salida el 13.
//---------------------------------------------------
#include<math.h> //incluida porque necesitamos función tangente
hiperbólica

byte p1,p2;
float n1,n2,n3;
float a1,a2;
float e=2.7182818;

void setup() {
pinMode(7,INPUT);
pinMode(8,INPUT);
pinMode(13,OUTPUT);
Serial.begin(9600);
}

void loop() {
p1=digitalRead(7);
p2=digitalRead(8);
Serial.print(p1);
Serial.print(" ");
Serial.print(p2);
Serial.print(" ");
//Primer neurona = entrada1*(peso 1,1) + entrada2*(peso 1,2) + (bias
1)
n1=p1*(-3.3326)+p2*(-1.9228)+(4.6732);

//Segunda neurona = entrada1*(peso 2,1) + entrada2*(peso 2,22)+(bias


1)
n2=p1*(-3.8230)+p2*(-1.5619)+(-0.0631);

a1=tansig(n1);
a2=tansig(n2);

//Tercer neurona
n3=a1*(0.7170)+a2*(-1.1662)+(-0.7903);
n3=round(n3); //Redondeo de la salida

digitalWrite(13,n3);
Serial.println(n3);

//Función tansig, para realizar la operación entre neuronas.


float tansig(float x){
float a;
a=(pow(e,x)-pow(e,-x))/(pow(e,x)+pow(e,-x));
return a;
}
//---------------------------------------------------

También podría gustarte