IST - Física HowTo - Informática 14:33
2025-12-22
  Programação
 
     Matlab
 
        Pacotes (Toolboxes)
 
           Neural Network
 
              Rede neural
 
              Métodos e funções
 
              Treino
 
              linearlayer
 
              nntraintool
 
              Deep learning
 
              Backpropagation
 
              Redes dinâmicas
 

Neural Network Toolkit - Treino de uma rede

Sumário
1. Introdução
2. Tipos de treino duma rede neural
3. Funções de treino de uma rede
4. Algoritmos de treino: Funções
5. Funções de pré e pós-processamento
6. Alvos desconhecidos ou irrelevantes
7. Divisão dos dados
8. Critérios para terminar o treino
9. Objecto "treino"
Início

1. Introdução

Início

2. Tipos de treino duma rede neural

Há dois tipos de treino da rede neural:
  • Treino incremental: Aqui os pesos e os vieses (biases) são actulizados cada vez que uma entrada é apresentada à rede;
  • Treino em lote (batch): Aqui os pesos e os vieses só são actualizados quando todas as entradas tiverem sido apresentadas.
Início

3. Funções de treino de uma rede

Existem diversas funções de treino de uma rede que se aplicam de acordo com o que se deseja fazer:
  • adapt: executa o número de iterações indicado pelo parâmetro net.trainParam.epochs. Pode funcionar em modo incremental ou batch:
    [net,Y,E,Pf,Af,tr] = adapt(net,P,T,Pi,Ai)
    em que os argumentos da função são: "net" é o objecto rede neural, "P" são as entradas, "T" os alvos (default "0"), "Pi" os valores iniciais dos atrasos (default "0") e "Ai" as condições de atraso da camada inicial (default "0").
    Por sua vez a função adapt retorna: "net" a rede neural actualizada, "Y" os valores das saídas da rede, "E" os valores dos erros, "Pf" condições finais de atraso da entrada, "Af" condições finais de atraso da camada e "tr" registo do treino (época e desempenho)
    Nota: Ao usar a função "adapt", se se representarem as entradas como uma matriz de células de vectores sequenciais, a actualização dos pesos será feita em modo incremental. Exemplo:
    P = {[1;2] [2;1] [2;3] [3;1]};
    T = {4 5 7 7};
    se forem apresentadas como uma matriz de vectores concorrentes, a actualização dos pesos será feita em modo lote (batch). Exemplo:
    P = [1 2 2 3; 2 1 3 1];
    T = [4 5 7 7];
  • Exemplo:
    [net,a,e] = adapt(net,X,T);
  • train: executa o número de iterações indicado pelo parâmetro net.trainParam.epochs e funciona em modo batch:
    [trainedNet,tr] = train(net,X,T,Xi,Ai,EW,Name,Value)
    em que os argumentos da função são: "net" é o objecto rede neural, "X" são as entradas, "T" os alvos (default "0"), "Xi" os valores iniciais dos atrasos (default "0"), "Ai" as condições de atraso da camada inicial (default "0"), "EW" erros dos pesos (default 1) "Name" nomes dos valores (default: não considerados) e "Value" valores associados aos nomes anteriores (default: não considerados).
    Por sua vez a função train retorna: "net" a rede neural actualizada, "tr" registo do treino,
    Exemplo:
    net = train(net,X,T)
Nota: Pode escolher-se o algoritmo de treino que se achar mais conveniente. A escolha é encontra-se definida do elemento "net.trainFcn" e os seus parâmetros em "net.trainParam" (ver: Algoritmos de treino: Funções).
Início

4. Algoritmos de treino: Funções

Existem diversos algorítmos de treino disponíveis:
FunçãoAlgorítmo
trainlmLevenberg-Marquardt
trainbrBayesian Regularization
trainbfgBFGS Quasi-Newton
trainrpResilient Backpropagation
trainscgScaled Conjugate Gradient
traincgbConjugate Gradient with Powell/Beale Restarts
traincgfFletcher-Powell Conjugate Gradient
traincgpPolak-Ribiére Conjugate Gradient
trainossOne Step Secant
traingdxVariable Learning Rate Gradient Descent
traingdmGradient Descent with Momentum
traingdGradient Descent
Deve ter-se em conta que a função rápida é geralmente "trainlm" (que é a defeito para redes feedforward. O método "trainbfg" também é rapido. Quando se treinam redes grandes os métodos "trainscg" e "trainrp" são, em geral, convenientes.
Início

5. Funções de pré e pós-processamento

Ver: Funções de pré e pós-processamento.
Início

6. Alvos desconhecidos ou irrelevantes

Alvos desconhecidos ou irrelevantes: são dados do tipo "NaN". Estes dados são ignorados durante os cálculos efectuados pelas funções de desempenho.
Início

7. Divisão dos dados

No treino das rades neurais é usual dividir dos dados em três partes:
  • Conjunto de treino: Usado para o cálculo do gradiente w actualização dos pesos e vieses;
  • Conjunto de validação: Durante o processo anterior, analisa a evolução do erro. Os pesos e os vieses são mantidos no mínimo do erro deste conjunto.
  • Conjunto de teste: Não é usado no treino mas é usado para comparar resultados de diferentes modelos.
Para a divisão dos dados existem as seguintes funções:
FunçãoAlgorítmo
dividerandDivide os dados aleatoriamente (default);
divideblockDivide os dados em blocos contíguos;
divideintDivide os dados usanso uma selecção intercalada;
divideindDivide os dados por índice.
A função de divisão está definida em "net.divideFcn" e os seus parâmetros em "net.divideParam". Exemplo:
net.divideFcn = 'dividerand';
ao fazer a atribuição da função são automaticamente atribuídos os valores por defeito respectivos.
Início

8. Critérios para terminar o treino

O treino termina quando uma das seguintes situações acontecer:
  • Quando o número de iterações atingir o valor máximo indicado net.trainParam.epochs;
  • Quando o módulo do gradiente for inferior a net.trainParam.min_grad;
  • Quando o número de iterações sucessivas em que o módulo gradiente não diminui for superior a net.trainParam.max_fail;
  • Quando o tempo de execução ultrapassar o seu tempo máximo net.trainParam.time;
  • Quando se atingir o valor mínimo de desempenho net.trainParam.goal.
  • Quando se usa o botão "Stop Training".
Note-se que em qualquer destas situações o object retornado (net) tem os valores actualizados de acordo com o treino efectuado. Assim, se se desejar, pode continuar-se o treino com outros valores dos parâmetros.
Início

9. Objecto "treino"

A função "train" retorna dois objectos: net (rede actualizada) e tr (objecto com as informações do treino). Vejamos alguns os elementos de tr:
  • tr.trainFcn: Função de treino utilizada;
  • tr.trainParam: Parâmetros da função de treino utilizada;
  • tr.trainInd: Índices do conjunto de treino;
  • tr.valInd: Índices do conjunto de validação;
  • tr.testInd: Índices do conjunto de teste;
  • tr.num_epochs: Número de iterações efectuado;
  • tr.best_epoch: Indica a iteração em que o desempenho da validação atingiu o mínimo;
  • tr.gradient: Vector com os valores do gradiente para cada iteração;
Para vizaulizar os gráficos disponíveis a partir tr:
  • Desempenho (performance): Para visualizar a função de desempenho em função do número de iterações para o treino, validação e teste
    plotperf(tr);
  • Regressão (regression): Para visualizar os resultados da regressão entre as saídas da rede e os alvos para as diferentes pertes do treino (treino, validação e teste). Exemplo para treino e teste:
    saidas = net(entradas);
    trOut = bodyfatOutputs(tr.trainInd);
    trTarg = bodyfatTargets(tr.trainInd);
    tsOut = bodyfatOutputs(tr.testInd);
    tsTarg = bodyfatTargets(tr.testInd);
    plotregression(trTarg, trOut, 'Train', tsTarg, tsOut, 'Testing');
Início