Você está na página 1de 4

%% clean-up inicializao close all clear all % clc percentualAmostrasValidacao=50/100; funcaoAvaliacao='limiar'; tempo_treinamento = 10000; % quantidade maxima de pocas de treinamento

epoca=1; % treinamento inicia na poca 1 %% ler dados de treinamento % % Estou admitindo que as amostras x[i] e o valor desejado d[i], % esto na primeira planilha da pasta excell. % Pode ter tantas variaveis x quanto desejado, ou necessrio % a varivel header contm o nome das variaveisa de treinamento. [x header]=xlsread('D:\mestrado\matematica\redes neurais\RNA01\dadosTreinamento\Tabela#Seo4.6_RNA.xls','plan1'); [ qtdPontos qtdCaracteristicasX]=size(x); %% monta saidas desejadas - d[i] - vetor coluna % saidas desejadas: ultima coluna dos dados de treinamento d=x( : ,qtdCaracteristicasX); %% cria bias - b[i] - vetor coluna % bias - elemento que indica a direo. % vem do Latim e significa em sua origem: via ou estrada, dai o % ditado: "Todas as vias nos levam a Roma", na poca do Imperio % Romano, as vias bem estruturadas foram construidas pelo Romanos % e todas, talvez com poucas excesses de fato levavam a Roma. % % Queres encurtar o caminho: "ab via" % v para a via, la a caminhada mais rapida, e voce pode % 'abreviar' o tempo de caminhada. % % Queres que todo saiba: "ab via" % Todo mundo : vaijantes, comerciantes, andarilhos passam pela % via, logo se estiver "ab via", na via ao lado da via todos vo % ver. Isto aumenta tambem sua chance de vender. % % obvio que obvio que de "ab via" --> "ob via" --> "obvia" -- obvio % viajem - tempo passado na via % viajante - aquele que andqa na via % % Pensas diferente? Encontrastes uma caminho (via) para fazer: temos % ento um novo "viz" % % A fim de no "enviezar" muito, e para tornar "obvio" o sentido de "bias": % Bias viz, direo, linha direcionadora, tendencia. % % Mas o que que tem a ver o "b" de bias e o "v" de via? % Existe um resposta, mas isto outra conversa

%% bias= 1 * ones(size(d)); %% montar padres de entrada: bias e x[i] x=[bias x(:,1:qtdCaracteristicasX-1)]'; coluna saidas desejadas - d[i] %% Gerar vetor de pesos aleatorios - w[i] % 0 < w[i] < 1 - valores aleatorios com distribuio uniforme % w_inicial o w[i] na poca zero % w[i] - vetor linha w_inicial=rand(1,qtdCaracteristicasX); %% clean-up pre-treinamento % distribui universo de amostras entre valicao e treinamento qtdAmostrasValidacao = floor(qtdPontos*percentualAmostrasValidacao); qtdAmostrasDeTreinamento = qtdPontos-qtdAmostrasValidacao; % % arbitra um taxa de aprendizagem maxima_energia_erro_toleravel=1/2; w=w_inicial; pesos rede_esta_treinada= false; sinalizadora de que a rede est treinada Acabou_periodo_treinamento = false; time-out % inicializa vetor de % inicializa condio % inicializa condio de % entra a coluna de bias e % sai a

%% treinamento % executa processo de treinamento at que a rede esteja treinada ou % que se encerre o periodo de tempo reservado para o treinamento %% Uma especie de reduo ao absurdo: % admitimos, como premissa inicial, que a condio % "rede_esta_treinada" verdadeira. Se concluirmos que a % condio falsa temos um absurdo, pois pelo Principio do % Terceiro Excludo - que rege a Lgica Booleana, uma condio % no pode ser verdadeira e falsa ao mesmo tempo. % % Este absurdo nos leva a concluir que a premissa inicial % "rede_esta_treinada" admitimos ser verdadeira, no o era, sendo % portanto falsa. E dado que a condio "rede_esta_treinada" % falsa deve-se iniciar um novo ciclo de treinamento. %% while ~(rede_esta_treinada || Acabou_periodo_treinamento) eta=1/(epoca*2+1); energia_acumulada_erros=0; erro_acumulado=0; for i=1:qtdAmostrasDeTreinamento %% processo: calcula neuronio % calcula o "campo local induzido - v" pela entrada v=w*x(:,i); % calcula a saida da rede utilizando funo de ativao do tipo

% limiar de ativao y=feval(funcaoAvaliacao,v,0,-1,1); %% Processo: Treina do neuronio: Modelo de treinamento: Perceptron - regra delta % Se a saida obtida (y) for diferente da desejada (d) % 1 - Concluimos que rede no est treinada e indicamos esta condio % 2 - ajusta os pesos if y~=d(i) % calcula erro erro = d(i) - v; erro_acumulado=erro_acumulado+erro; energia_erro = erro*erro/2; energia_acumulada_erros = energia_acumulada_erros + energia_erro; % Ajusta pesos w = w + eta*erro_acumulado*x(:,i)'; end end disp ( sprintf('erro.........: %5.0f', erro)); disp ( sprintf(' energia_erro..%5.0f', energia_erro) ); rede_esta_treinada = ((energia_acumulada_erros/qtdAmostrasDeTreinamento)<maxima_energia_erro_t oleravel); epoca=epoca+1; Acabou_periodo_treinamento=(epoca>tempo_treinamento); end %% avaliar resultado do treinamento acertos=0; erros=0; for i=(qtdPontos-qtdAmostrasValidacao+1):qtdPontos %% processo: neuronio % calcula o campo local induzido amostras(u) e o bias(b) por esta amostra v=w*x(:,i); % calcula a saida da rede utilizando funo de ativao do tipo limiar de ativao y=feval(funcaoAvaliacao,v,0,-1,1); %% Processo: Treinamento do neuronio: Modelo de treinamento: Perceptron % Se a saida obtida (y) for igual a desejada incrementa % seno incrementa erros if y == d(i) acertos=acertos+1; else erros=erros+1; end end %% Estatisticas do treinamento acertos

disp ('-----Rede Perceptrom - Pesos Iniciais: "Randomicos"-----'); disp ( sprintf('Qtd. Amostras..................: %5.0f', qtdPontos) ); disp ( sprintf('Qtd. AmostrasValidacao.........: %5.0f', qtdAmostrasValidacao ) ); disp ( sprintf('Qtd. Amostras de Treinamento...: %5.0f', qtdAmostrasDeTreinamento ) ); disp ( sprintf('Convergencia em................: %5.0f pocas\n', epoca ) ); disp ('pesos iniciais:'); disp (w_inicial); disp ('pesos finais:'); disp (w); disp (sprintf('Acertos: %3.2f \nErros: %3.2f \nPercentual de Acertos: %3.2f%%\n\n', acertos,erros, 100*acertos/(acertos+erros) ));