|
|
|
|
Rede multicamada e treino de "backpropagation"
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
|
|
|
|