Академический Документы
Профессиональный Документы
Культура Документы
Rede Perceptron
Aplicando a lgebra de Booleana fica claro que a relao entre as entradas (A, B
e C) e a sada (Se) dada pela equao 1.
= ( + ) (1)
A B C SE
0 0 0 0
0 0 1 0
0 1 0 0
1 0 0 1
0 1 1 0
1 1 0 0
1 0 1 1
1 1 1 0
Como o objetivo treinar uma arquitetura de Rede Neural Artificial (RNA) que
aprenda o padro de sada Se do circuito lgico dado os sinais de entrada A, B e C a
rede deve apresentar a seguinte arquitetura mostrada na Figura 2.
Figura 2 Arquitetura da RNA.
= (1 + 2 + 3 + 0 ) (2)
0, < 0
() = { (3)
1, 0
Para cada entrada calculado o erro (E) que dado pela diferena entre a
resposta desejada, que a resposta natural do circuito lgico (SE) e a resposta da rede
(ST) como mostra a equao 4.
= (4)
Enquanto existir erro de estimao, ou enquanto este erro for menor que
determinada tolerncia, o algoritmo deve atualizar os pesos sinpticos para melhor
adequar a rede ao problema concluindo uma poca de treinamento a cada vez que todas
as entradas da Tabela 1 forem testadas. A atualizao dos pesos sinpticos ocorre
conforme as equaes 5, 6 e 7. O bias atualizado conforme a equao 8.
1 = 1 + (5)
2 = 2 + (6)
3 = 3 + (7)
0 = 0 + (8)
Onde representa os valores atualizados e os valores anteriores
atualizao. Os resultados sero apresentados na seo seguinte, o os cdigos que
levaram aos resultados obtidos esto em anexo.
Resultados
1
0.5
A
0
1 2 3 4 5 6 7 8
(a)
1
0.5
B
0
1 2 3 4 5 6 7 8
(b)
1
0.5
C
0
1 2 3 4 5 6 7 8
(c)
1
Saida
0.5
0
1 2 3 4 5 6 7 8
(d)
Figura 3 (a) entrada A; (b) entrada B; (c) entrada C e (d) sada do circuito lgico, conforme a equao 1.
Simulao W1 W2 W3 Wo
1 1,9575 -1,0351 -0,8424 -1,0294
2 1,9571 -1,5146 -0,1997 -0,8581
3 1,4217 -1,0842 -0,2078 -1,0405
4 1,6557 -1,9643 -0,1509 -0,066
Saida do Circuito
1
0.5
0
1 2 3 4 5 6 7 8
(a)
1
Saida da RNA
0.5
0
1 2 3 4 5 6 7 8
(b)
1
Erro de Estimao
-1
1 2 3 4 5 6 7 8
(c)
Figura 4 (a) resposta do circuito lgico; (b) resposta da rede neural; (c) erro de estimao.
1
simulao 1
0.9 simulao 2
simulao 3
0.8
simulao 4
0.7
0.6
Erro Mdio
0.5
0.4
0.3
0.2
0.1
0
1 1.5 2 2.5 3 3.5 4
Epocas
Plotpv
Vectors to be Classified
1
P(3)
0.5
1.5
1 1.5
0.5 1
0.5
0 0
P(2) -0.5 -0.5
P(1)
for i = 1:length(in)
saida(i,:) = circuito_logico(in(i,:));
end
Tabela 4 Circuito lgico cuja resposta est a equao 1.
function s = circuito_logico(x)
% x(1) = A
% x(2) = B
% x(3) = C
plotpv(in',saida')
Newp
Esta funo cria uma arquitetura de uma rede perceptron de mltiplas camadas
ou de camada nica, neste caso utilizou-se uma rede de camada nica, devem ser
considerados como argumento de entrada: os limites inferior e superior dos dados de
entrada e o numero de neurnios. Aps a criao de uma arquitetura de rede,
conveniente alimentar os dados de entrada na nova arquitetura criada antes de se
realizar o treinamento, como mostra a Tabela 6. A Figura 7 ilustra a arquitetura criada.
net = newp(minmax(in'),1);
y = net(in');
net = train(net,in',saida');
plotpc(net.iw{1,1},net.b{1})
1 1
P(2)
P(2)
0.5 0.5
0 0
-0.5 -0.5
-0.5 0 0.5 1 1.5 -0.5 0 0.5 1 1.5
P(1) P(1)
Sim
Por fim, o comando sim usado para simular uma resposta da rede j treinada a
fim de avaliar seu desempenho. conveniente comparar graficamente a resposta da
rede aps a utilizao do comando sim com a resposta desejada, como foi feito na
Figura 10. A utilizao do comando sim mostrada na Tabela 9.
saidan = sim(net,in');
1
Saida do Circuito
0.5
0
1 2 3 4 5 6 7 8
(a)
1
Saida da RNA
0.5
0
1 2 3 4 5 6 7 8
(b)
Anexo
for i = 1:length(in)
saida(i,:) = circuito_logico(in(i,:));
end
figure
subplot(411)
stem(in(:,1),'k','linewidth',2)
axis([1 8 -0.1 1.1])
ylabel('A')
xlabel('(a)')
subplot(412)
stem(in(:,2),'k','linewidth',2)
axis([1 8 -0.1 1.1])
ylabel('B')
xlabel('(b)')
subplot(413)
stem(in(:,3),'k','linewidth',2)
axis([1 8 -0.1 1.1])
ylabel('C')
xlabel('(c)')
subplot(414)
stem(saida,'r','linewidth',2)
axis([1 8 -0.1 1.1])
ylabel('Saida')
xlabel('(d)')
% Inicio do Perceptron
w1 = rand(1);
w2 = rand(1);
w3 = rand(1);
wo = rand(1);
er = 1;
ite = 1;
for i = 1:length(in)
% Funo de ativao
if ya(i)>=0
y(i) = 1;
else
y(i) = 0;
end
if erro(i) ~= 0
w1 = w1 + erro(i)*in(i,1);
w2 = w2 + erro(i)*in(i,2);
w3 = w3 + erro(i)*in(i,3);
wo = wo + erro(i);
end
end
epoca(ite) = ite;
ite = ite + 1;
er(ite) = mean(abs(erro));
end
figure
subplot(311)
plot(saida,'k','linewidth',2)
xlabel('(a)')
ylabel('Saida do Circuito')
axis([1 8 -0.1 1.1])
subplot(312)
plot(y,'r','linewidth',2)
xlabel('(b)')
ylabel('Saida da RNA')
axis([1 8 -0.1 1.1])
subplot(313)
plot(erro,'b','linewidth',2)
xlabel('(c)')
ylabel('Erro de Estimao')
figure
plot(er,'k','linewidth',2)
ylabel('Erro Mdio')
xlabel('Epocas')
grid
pause
close all