Escolar Documentos
Profissional Documentos
Cultura Documentos
Automação Inteligente
Relatório de laboratório
Rede Perceptron
Docente:
Jose Diaz
Discente:
André Almeida
Vitória da conquista – BA
04 de agosto de 2017
Sumário
1 OBJETIVO ............................................................................................................................... 3
2 DESENVOLVIMENTO DA REDE PERCEPTRON ........................................................................ 4
2 RESULTADOS ......................................................................................................................... 6
2.1 LÓGICA AND .................................................................................................................. 6
2.2 LÓGICA OR ..................................................................................................................... 7
2.3 LÓGICA NAND ................................................................................................................ 8
2.4 LÓGICA XOR ................................................................................................................... 9
1 OBJETIVO
Desenvolver código da rede Perceptron através do MATLAB e observar os
seus resultados para o treinamento da lógica booleana.
2 DESENVOLVIMENTO DA REDE PERCEPTRON
A atividade realizada em laboratório teve o objetivo de desenvolver o código da
rede Perceptron em MATLAB e observar a sua funcionalidade para problemas
separáveis linearmente.
Com o código desenvolvido, a rede realiza o treinamento para as lógicas AND,
OR, NAND e XOR a depender da escolha do usuário, mostra os resultados de
saída e os valores de pesos de cada entrada. Com isso é possível observar que o
Perceptron não consegue classificar a lógica XOR, como era esperado. O código
segue no quadro abaixo.
clear all;
clc;
%Entrada de dados
x1 = [0 1 0 1];
x2 = [0 0 1 1];
%Bias
b = 1;
%Pesos
w = rand(1,3);
%Taxa aprendizado
n = 0.7;
%Variavel saida
Y = zeros(1,4);
%Erros
erro = 1;
erro_epoca = 1;
%Epocas
k = 1;
%Saida desejada
if (t==1)
Ydsjd = [0 0 0 1];
else if (t==2)
Ydsjd = [0 1 1 1];
else if (t==3)
Ydsjd = [1 1 1 0];
else if (t==4)
Ydsjd = [0 1 1 0];
end
end
end
end
%Treinamento lógico
while (erro_epoca ~= 0) && (k<=100)
%iniciando erro da epoca em 0
erro_epoca = 0;
for i=1:4
%Somatório Neurônio
soma = b*w(1,1) + x1(1,i)*w(1,2) + x2(1,i)*w(1,3);
%Função Limiar
if soma<0
Y(1,i) = 0;
else
Y(1,i) = 1;
end
%Atualização de pesos
w(1,1) = w(1,1) + n*erro;
w(1,2) = w(1,2) + n*erro*x1(1,i);
w(1,3) = w(1,3) + n*erro*x2(1,i);
A saída da rede é:
0 0 0 1
Pesos:
bias x1 x2
-2.0345 0.7952 1.5869
Épocas:
6
Quadro 2: Resultado de treinamento para a lógica AND.
2.2 LÓGICA OR
Para um treinamento realizado para a lógica OR os resultados são apresentados
no quadro abaixo, comprovando novamente a classificação correta do sistema.
A saída da rede é:
0 1 1 1
Pesos:
bias x1 x2
-0.2102 0.4456 0.6463
Épocas:
2
Quadro 3: Resultado de treinamento para a lógica OR.
2.3 LÓGICA NAND
O treinamento para a lógica NAND também pode ser realizado e os resultados
seguem abaixo.
A saída da rede é:
1 1 1 0
Pesos:
bias x1 x2
2.0797 -0.7449 -1.9374
Épocas:
7
Quadro 4:Resultado de treinamento para a lógica NAND.
2.4 LÓGICA XOR
Como era esperado, para a lógica XOR a saída da rede não é igual a saída deseja.
Foi observado que o erro entre a resposta calculada e a desejada é -1 e o
treinamento só é encerrado quando a quantidade máxima de épocas é alcançada,
pois o erro não zera. No código foi estabelecido uma quantidade máxima de 100
épocas. O resultado é apresentado no quadro a seguir.
A saída da rede é:
1 0 0 1
O erro do sistema é:
-1
Pesos:
bias x1 x2
0.0094 0.0547 -0.4240
Épocas:
100
Quadro 5: Resultado de treinamento para a lógica XOR.