Você está na página 1de 9

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.