A maior rede de estudos do Brasil

Grátis
2 pág.
codigo multiplo perceptron

Pré-visualização | Página 1 de 1

15/03/2017 www.moodlepresencial.ufop.br/moodle/pluginfile.php/145817/mod_resource/content/1/bkprop_seno.m
http://www.moodlepresencial.ufop.br/moodle/pluginfile.php/145817/mod_resource/content/1/bkprop_seno.m 1/2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% UNIVERSIDADE FEDERAL DE OURO PRETO ‐ UFOP 
% DEPARTAMENTO DE COMPUTACAO E SISTEMAS DE INFORMACAO ‐ DECSI 
% Prof. Talles Henrique de Medeiros           
% E.mail: talles.medeiros@decea.ufop.com 
%                                                             
% Algoritmo Backpropagation, em notacao matricial. 
%                                                                
% Implementacao em Matlab 
% Note: x'      eh a transposta da matriz x 
%       x.*y    eh o produto de x e y elemento por elemento 
%                                                                
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%%%%%%%%%%%%%%%%%% Configuracoes Iniciais das variaveis 
clear all; 
close all; 
clc; 
%patterns    = [0 0; 0 1; 1 0; 1 1]; % O padrao de entrada para o problema XOR 
%desired_out = [ 0; 1; 1; 0];        % A saida desejada para o problema XOR 
variancia = 0.05; 
ruido = variancia*randn(size(patterns));; 
patterns = [‐1:0.05:1]; 
desired_out = sin(2*pi*patterns) + ruido; 
sse_rec = [];   % Ira gravar a soma dos erros quadrados (SSE) 
sse = 10;       % Um valor de SSE inicial que deve ser um valor grande, para o executar o WHILE
eta = 0.05;     % Taxa de Aprendizado. Note: eta = 1 e muito grande. 
                % Para XOR, isto converge rapidamente. 
alpha = 0.1;    % Termo de Momentum. 
% Acrescenta uma coluna de 1's para os padroes inserindo um bias 
patterns = [patterns ones(size(patterns,1),1) ];                 
num_inp = size(patterns,2);     % No. de neuronios de entrada (incluindo o bias). 
num_hid = 5;                    % No. de neuronios ocultos (incluindo bias). 
num_out = size(desired_out,2);  % No. of neuronios de saida. 
%%%%%%% Iniciando os pesos sinapticos com valores de baixa magnitude, na faixa [‐0.5,0.5] 
%%%%%%%%% 
w1 = 0.01*(1‐2*rand(num_inp,num_hid‐1));  
        % Entrada para os pesos ocultos. NB: no weights to bias hidden node 
w2 = 0.01*(1‐2*rand(num_hid,num_out));   % Pesos da camada oculta. 
        % Note: rand(rows,cols) eh uma matriz de numeros aleatorios 
dw1_last = zeros(size(w1));             % ultimo w1 modificado, set to a zero matrix 
dw2_last = zeros(size(w2));             % ultimo w2 modificado, set to a zero matrix 
epoch    = 0;                           % Inicializa o contador de epocas do treinamento 
epsilon  = 0.01 
tmax = 1; 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Laco Principal  
while epoch < 100                          % Quando sse for pequeno suficientemente, ira finalizar 
         
        % ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ FASE FOWARD 
        winp_into_hid = patterns * w1;                         % Passa padroes atraves dos pesos s 
= X.W 
        hid_act       = 1 ./ (1+exp( ‐ winp_into_hid));        % Sigmoide dos pesos de entrada 
yhidden = sigmoide(s) 
        hid_with_bias = [ hid_act ones(size(hid_act,1),1) ];   % Acresce neuronio de bias 
        winp_into_out = hid_with_bias * w2;               % Passa saida da camada oculta para 
camada de saida 
         
        out_act       = 2 ./ (1 + exp( ‐ 2*winp_into_out)) ‐ 1;     % Sigmoide de entrada para 
15/03/2017 www.moodlepresencial.ufop.br/moodle/pluginfile.php/145817/mod_resource/content/1/bkprop_seno.m
http://www.moodlepresencial.ufop.br/moodle/pluginfile.php/145817/mod_resource/content/1/bkprop_seno.m 2/2
saida 
                         
        output_error = desired_out ‐ out_act;             % Matriz de erros 
         
        sse          = trace(output_error'*output_error); % Soma erros quadraticos, estilo matriz 
        sse_rec      = [sse_rec sse];                     % Grava historia de erros da saida 
         
        deltas_out   = output_error .* (1 ‐ out_act.*out_act); % delta=dE/do * do/dnet 
         
        deltas_hid = deltas_out*w2' .* hid_with_bias .* (1‐hid_with_bias); 
        deltas_hid(:,size(deltas_hid,2)) = []; % Pegue os sinais de erros dos neuronios bias 
         
        % ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ A etapa chave do backpropagation 
        dw1 = eta * patterns' * deltas_hid + alpha * dw1_last;  
        dw2 = eta * hid_with_bias' * deltas_out + alpha * dw2_last; 
         
        w1 = w1 + dw1; w2 = w2 + dw2;           % Atualizacao dos pesos 
        dw1_last = dw1; dw2_last = dw2;         % Atualiza o termo momentum 
        epoch = epoch + 1; 
         
        if rem(epoch,50)==0                     % A cada 50 epocas, mostra como estao indo o 
treinamentos 
                 disp([' Epoca ' num2str(epoch) '  SSE ' num2str(sse)]); 
        end 
        tmax = tmax + 1; 
end      
% ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ Plota Grafico de Erro Quadratico 
figure(1); 
plot(sse_rec); xlabel('Epocas'); ylabel('Soma dos Erros Quadrados (SSE)'); % Fim 
title('Curva de Erro') 
% ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ Plota Funcao Aproximada pela MLP 
figure(2); 
plot(desired_out, 'bo'); hold on; plot(out_act, 'r‐'); 
figure(3); bar(w1); 
figure (4); bar(w2)