PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> eje_red_neuronal

Contents

PROGRAMA: ALGORITMO DE REDES NEURONALES

%Universidad de Cantabria
%Máster en Investigación en Ingeniería Industrial
%Asignatura: Control Inteligente de Procesos
% Autor: Andrés Felipe López Rodríguez
%Ejercicio: Programa que cree un percetrón multicapa con dos entradas, una capa oculta de 5 neuronas sigmoides y una capa de salida con dos neuronas lineales.
clc; clear all; close all;
%Conjunto de entrenamiento
x1=-1:0.1:1;
x2=x1;
[xx1,xx2]=meshgrid(x1,x2);
%Los targets (objetivos)
t1=xx1.*xx1+xx2.*xx2;
t2=xx1.*xx1+xx2.*xx2;
%Ruido agregado al sistema
nl=0.1;
%Ruido a los objetivos
t1=t1+nl*randn(size(t1));
t2=t2+nl*randn(size(t1));
%Vector de entrada (en este caso es una amtriz porque hay dos entradas)
x=[xx1(:) xx2(:)]';
%Vector objetivo
t=[t1(:) t2(:)]';

Función para la creación de la Red Neuronal

N=5;
red=creared_A([size(x,1) N size(t,1)]); %Se define como un vector conformado por la cantidad de entradas, cantidad de capas ocultas y cantidad de salidas
Numero de parametros = 27

Entrenamiendo de la Red Neuronal

%Factor de aprendizaje inicial
g=1e-1;
%Número máximo de épocas
Ne=10000;
%Error cuadrático objetivo
Emin=1e-2;
%Porcentaje de las entradas que será tomado para validar el aprendizaje de la red
ntest=0.1;
%Función para el entrenamiento de la Red
tic
[red,ebest,ecm,g]=entrenared_A(red,x,t,g,Ne,Emin,ntest);
toc

%Error de entrenamiento
etrain=ecm(:,1);        %del entrenamiento
etest=ecm(:,2);         %del ensayo
Ecmtrain=etrain(end);
Ecmtest=etest(end);
Ntrain = 397  Ntest = 44
 
Emin alcanzado
Ecmbest: train = 0.011921 test = 0.0098923  alcanzado en epoch 687
regresion entrenamiento = 0.69172      0.2231
correlacion entrenamiento = 0.94809
regresion test = 0.73637     0.19788
correlacion test = 0.91615
regresion entrenamiento = 0.77493     0.15659
correlacion entrenamiento = 0.95937
regresion test = 0.80431     0.15888
correlacion test = 0.9453
Elapsed time is 0.866868 seconds.
figure;
subplot(1,2,1);
mesh(xx1, xx2, t1);
title('t1');
axis equal
subplot(1,2,2);
mesh(xx1, xx2, t2);
title('t2');
axis equal
%Variable para la salida de la red calculada
yy=zeros([size(xx1) 2]);
for n=1:size(yy,1)
    for m=1:size(yy,2)
        yy(n,m,:)=calculared_A(red,[xx1(n,m);xx2(n,m)]);   %las salidas que se obtienen, (n y m), deben ser iguales a t1 y t2. Se emplea la red que ya ha sido entrenada, es decir, la 'red' actualizada
        %[y, red] = calculared_A(red, x);
    end
end