|
|
Neural Network Toolkit - Treino de uma rede
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ção | Algorítmo |
| trainlm | Levenberg-Marquardt |
| trainbr | Bayesian Regularization |
| trainbfg | BFGS Quasi-Newton |
| trainrp | Resilient Backpropagation |
| trainscg | Scaled Conjugate Gradient |
| traincgb | Conjugate Gradient with Powell/Beale Restarts |
| traincgf | Fletcher-Powell Conjugate Gradient |
| traincgp | Polak-Ribiére Conjugate Gradient |
| trainoss | One Step Secant |
| traingdx | Variable Learning Rate Gradient Descent |
| traingdm | Gradient Descent with Momentum |
| traingd | Gradient 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ção | Algorítmo |
| dividerand | Divide os dados aleatoriamente (default); |
| divideblock | Divide os dados em blocos contíguos; |
| divideint | Divide os dados usanso uma selecção intercalada; |
| divideind | Divide 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
|
|