IST - Física HowTo - Informática 14:34
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
 

Rede multicamada e treino de "backpropagation"

Sumário
1. Introdução
2. Criação de uma rede neural feedforward multicamada
3. Treino da rede
4. Exemplo com a utilização do repositório 'bodyfat' com imagens de roupas
5. Análise dos resultados do treino
6. Para melhorar os resultados
7. Links úteis
Início

1. Introdução

Início

2. Criação de uma rede neural feedforward multicamada

Para criar rede feedforward multicamada podem usar-se as funções
  • feedforwardnet: esta função cria uma rede neural feedforward multicamada:
    net = feedforwardnet (hiddenSizes, trainFcn)
    em que hiddenSizes é um vector linha com o número de neurónios de cada camada oculta (default: 10 -- um camada com 10 neurónios), trainFcn é a função de treino a utilizar (default: 'trainlm') e retorna o objecto rede neural assim criado.
  • patternnet: é uma função análoga à anterior especialmemte orientada para classificar entradas de acordo com os seus alvos:
    net = patternnet (hiddenSizes, trainFcn, performFcn)
    em que o argumento adicional performFcn é a função de desempenho a utilizar (default: 'crossentropy').
Início

3. Treino da rede

O processo de treino é feito pelas funções de desempenho e envolve ajustes dos pesos e vieses (biases) definida em "net.performFcn". Para redes feedforward a função de desempenho é, por defeito, é função erro quadrado médio "mse". Aqui, o gradiente e o jacobiano são calculados através do algorítmo de backpropagation que envolve cálculos retroactivos na rede.
Início

4. Exemplo com a utilização do repositório 'bodyfat' com imagens de roupas

O repositório "bodyfat" está pré-definido e é constituído pelos dados de 252 imagens de vestuário (bodyfatInputs) que correspondem a 13 alvos diferentes (bodyfatTargets).
Quer-se configurar uma rede neural capaz de fazer o seu reconhecimento:
load bodyfat_dataset;Leitura dos dados do repositório "bodyfat"
net=feedforwardnet;Criação de uma rede "feedforward" não configurada com duas camadas com 10 neurónios na camada oculta (default)
net=configure(net,bodyfatInputs,
bodyfatTargets);
Configuração da rede com os valores das entradas e alvos
não sendo explicitados, os valores implícitos pré-definidos são "trainlm" para a função de treino, e as funções de transferências serão a "tansig" excepto para a última camada que será "purelin". A função "configure" faz a inicialização da rede, no entanto, se se quiser fazer a sua reinicialização deve usar-se a função "init":
net = init(net);
Continuando, pode agora pedir-se para ser feito o treino da rede com a função "train"
[net, tr] = train (net, bodyfatInputs, bodyfatTargets);
Note-se que, neste caso, não era necessário ter chamado a função "configure" uma vez que ela é chamada por "train".

Por defeito, a função "train" abre uma janela de treino em que se mostra a sua evolução bem como alguns dos parâmetros desse treino.

Uma vez feito o treino, podemos obter as respostas da rede para uma dada entrada, ou para todas:

a = net(bodyfatInputs(:,5))
a = net(bodyfatInputs)
Note-se, no entanto, que se podem obter respostas diferentes quando a rede é treinada, pois os valores obtidos para os pesos e vieses podem ser calculados de modos diferentes.
Início

5. Análise dos resultados do treino

Como se viu o segundo valor de retorno da função "train" é um objecto com os seus resultados. A sua análises é essencial para se saber como ele decorreu e se é necessário ou não melhorá-lo.
Para mais informações ver: Treino de uma rede.
Início

6. Para melhorar os resultados

Se se considerar que os resultados não são suficiente bons, pode reiniciar-se o processo com parâmetros da rede diferentes. Para tal, de reiniciar-se a rede e depois executar-se o treino:
net = init(net);
net = train(net, bodyfatInputs, bodyfatTargets);
Pode também aumentar-se o número de neurónios, pois, dá mais flexibilidade mas convém fazê-lo progressivamente.
Uma outra opção será alterar a função de treino. Finalmente, se for possível, aumente o números de treino disponíveis.
Início

7. Links úteis

Início