Engenharia Elétrica
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;
%Dados para a lógica booleana
disp('Valores de entrada para o teste lógico: ');
disp(['x1: ', num2str(x1)]);
disp(['x2: ', num2str(x2)]);
disp(' ');
disp('Escolha a Lógica a ser implementada: ');
disp('Digite 1 para Lógica AND: ');
disp('Digite 2 para Lógica OR: ');
disp('Digite 3 para Lógica NAND: ');
disp('Digite 4 para Lógica XOR: ');
disp(' ');
t = input('');
disp(' ');
%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
%Erro entre a saida calculada e a desejada
erro = Ydsjd(1,i) - Y(1,i);
%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);
%Erro global da epoca
erro_epoca = erro_epoca + abs(erro);
end
%Contador de épocas
k = k+1;
end
%Informações para o usuário
disp('Sua saída desejada é: ');
disp(Ydsjd);
disp('A saída da rede é: ');
disp(Y);
if (erro ~= 0)
disp('O erro do sistema é: ');
disp(erro);
end
disp('Pesos: ');
disp(' bias x1 x2');
disp(w);
disp('Épocas: ');
disp(k-1);
Quadro 1: Código Perceptron.
2 RESULTADOS
Os resultados comprovam que o Perceptron não consegue classificar a lógica
XOR.
Como os valores dos pesos são iniciados de forma aleatória, os seus valores finais,
após o treinamento, podem variar de um treinamento para outro.
2.1 LÓGICA AND
Em um treinamento realizado para a lógica AND os resultados são apresentados
no quadro abaixo.
Valores de entrada para o teste lógico:
x1: 0 1 0 1
x2: 0 0 1 1
Escolha a Lógica a ser implementada:
Digite 1 para Lógica AND:
Digite 2 para Lógica OR:
Digite 3 para Lógica NAND:
Digite 4 para Lógica XOR:
Sua saída desejada é:
0 0 0 1
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.
Valores de entrada para o teste lógico:
x1: 0 1 0 1
x2: 0 0 1 1
Escolha a Lógica a ser implementada:
Digite 1 para Lógica AND:
Digite 2 para Lógica OR:
Digite 3 para Lógica NAND:
Digite 4 para Lógica XOR:
Sua saída desejada é:
0 1 1 1
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.
Valores de entrada para o teste lógico:
x1: 0 1 0 1
x2: 0 0 1 1
Escolha a Lógica a ser implementada:
Digite 1 para Lógica AND:
Digite 2 para Lógica OR:
Digite 3 para Lógica NAND:
Digite 4 para Lógica XOR:
Sua saída desejada é:
1 1 1 0
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.
Valores de entrada para o teste lógico:
x1: 0 1 0 1
x2: 0 0 1 1
Escolha a Lógica a ser implementada:
Digite 1 para Lógica AND:
Digite 2 para Lógica OR:
Digite 3 para Lógica NAND:
Digite 4 para Lógica XOR:
Sua saída desejada é:
0 1 1 0
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.