matlab - reconocimiento - explicación del código de la red neuronal
redes neuronales convolucionales matlab (1)
La siguiente es una implementación de un Perceptron simple suministrado en un blog .
input = [0 0; 0 1; 1 0; 1 1];
numIn = 4;
desired_out = [0;1;1;1];
bias = -1;
coeff = 0.7;
rand(''state'',sum(100*clock));
weights = -1*2.*rand(3,1);
iterations = 10;
for i = 1:iterations
out = zeros(4,1);
for j = 1:numIn
y = bias*weights(1,1)+...
input(j,1)*weights(2,1)+input(j,2)*weights(3,1);
out(j) = 1/(1+exp(-y));
delta = desired_out(j)-out(j);
weights(1,1) = weights(1,1)+coeff*bias*delta;
weights(2,1) = weights(2,1)+coeff*input(j,1)*delta;
weights(3,1) = weights(3,1)+coeff*input(j,2)*delta;
end
end
Tengo las siguientes preguntas,
(1) ¿cuál está entrenando datos aquí?
(2) ¿cuál es la información de prueba aquí?
(3) ¿cuáles son las etiquetas aquí?
los datos de entrenamiento son [0 0; 0 1; 1 0; 1 1] en la otra vista cada fila es un conjunto de datos de entrenamiento como sigue
>> input
input =
0 0
0 1
1 0
1 1
y el objetivo es
desired_out =
0
1
1
1
por favor, piense acerca de las deseadas. Estas son sus etiquetas . Cada fila en los datos de entrenamiento (entrada) tiene una salida específica (etiqueta) en el conjunto binario {0,1} (porque este ejemplo para la implementación del circuito lógico OR.
en matlab puede usar o funcionar de la siguiente manera para una mayor comprensión:
>> or(0,0)
ans =
0
>> or(1,0)
ans =
1
>> or(0,1)
ans =
1
>> or(1,1)
ans =
1
Tenga en cuenta que su código no tiene ninguna prueba de entrenamiento y este código solo trata de obtener pesos y otros parámetros de perceptron pero puede agregar una prueba de entrenamiento a su código con solo un pequeño programa.
NumDataTest = 10 ;
test=randi( [0 , 1] , [ NumDataTest , 2]) ...
+(2*rand(NumDataTest,2)-1)/20;
entonces los datos de prueba serán similares a los siguientes
test =
1.0048 1.0197
0.0417 0.9864
-0.0180 1.0358
1.0052 1.0168
1.0463 0.9881
0.9787 0.0367
0.9624 -0.0239
0.0065 0.0404
1.0085 -0.0109
-0.0264 0.0429
para probar esta información puede usar su propio programa por el siguiente código:
for i=1:NumDataTest
y = bias*weights(1,1)+test(i,1)*weights(2,1)+test(i,2)*weights(3,1);
out(i) = 1/(1+exp(-y));
end
y finalmente:
table(test(:,1),test(:,2),out,''VariableNames'',{''input1'' ''input2'' ''output''})
salida es
input1 input2 output
_________ _________ ________
1.0048 1.0197 0.99994
0.041677 0.98637 0.97668
-0.017968 1.0358 0.97527
1.0052 1.0168 0.99994
1.0463 0.98814 0.99995
0.97875 0.036674 0.9741
0.96238 -0.023861 0.95926
0.0064527 0.040392 0.095577
1.0085 -0.010895 0.97118
-0.026367 0.042854 0.080808
Sección del código:
clc
clear
input = [0 0; 0 1; 1 0; 1 1];
numIn = 4;
desired_out = [0;1;1;1];
bias = -1;
coeff = 0.7;
rand(''state'',sum(100*clock));
weights = -1*2.*rand(3,1);
iterations = 100;
for i = 1:iterations
out = zeros(4,1);
for j = 1:numIn
y = bias*weights(1,1)+input(j,1)*weights(2,1)+input(j,2)*weights (3,1);
out(j) = 1/(1+exp(-y));
delta = desired_out(j)-out(j);
weights(1,1) = weights(1,1)+coeff*bias*delta;
weights(2,1) = weights(2,1)+coeff*input(j,1)*delta;
weights(3,1) = weights(3,1)+coeff*input(j,2)*delta;
end
end
%% Test Section
NumDataTest = 10 ;
test=randi( [0 , 1] , [ NumDataTest , 2]) ...
+(2*rand(NumDataTest,2)-1)/20;
for i=1:NumDataTest
y = bias*weights(1,1)+test(i,1)*weights(2,1)+test(i,2)*weights(3,1);
out(i) = 1/(1+exp(-y));
end
table(test(:,1),test(:,2),out,''VariableNames'',{''input1'' ''input2'' ''output''})
Espero que esto ayude y lo siento por mi inglés si es malo