Você está na página 1de 4

Tutoria RNA tipo FF – Matlab®

Marco Bezerra
marcobz@gmail.com

1. Criar uma RNA no Matlab® através da função newff   :

net =newff  PR ,[ S1 S2...SNl ] , TF1TF2...TFNl , BTF , BLF , PF  (1)

Onde:
PR: R x 2 matrix of min and max values for R input elements
Si: Size of ith layer, for Nl layers
Tfi: Transfer function of ith layer, default = 'tansig'
BTF: Backpropagation network training function, default = 'traingdx'
BLF: Backpropagation weight/bias learning function, default = 'learngdm'
PF: Performance function, default = 'mse'

Exemplo XOR:

Dado o conjunto de valores desejados para treinamento D :

D=
[ ]
Xd
Yd
(2)

Em nosso caso, utilizaremos como função a tanh   (tangente hiperbólica) com saídas
variando no intervalo [1, 1] , para tal faremos uma transformação linear nos dados da
tabela verdade da função XOR, subtraindo 0,5 da entrada e da saída:
X d= [ 0,5 0,5 0,5 0,5
0,5 0,5 0,5 0,5 ] (3)

Y d =[ 0,5 0,5 0,5 0,5 ] (4)

A tangente hiperbólica, por ser uma função anti-simétrica possui um treinamento mais
rápido. Os valores posicionados no intervalo [0,5 ,0,5] evitam a saturação dos pesos
sinápticos.
Embora seja possível o aprendizado com uma rede contendo apenas dois neurônios na
camada oculta, para efeito de exemplificação, serão utilizados cinco e um único na
camada de saída:

>> net =newff [0.5,0.5 ;0.5,0.5] ,[5,1] , ' tansig ' , ' tansig ' ,' traingdx ' (5)

2. Estabelecer as condições de treinamento no Matlab®:

>> net.trainParam.epochs=10000 (6)

>> net.trainParam.show=5 (7)

3. Treinar a rede:

>> netTreinada=trainnet , Xd , Yd  (8)

Figura 2: Resultado do treinamento

4. Testar. Utilizaremos os próprios dados de treinamento:

>> y=sim netTreinada , Xd  (9)

Resultado:

y=

-0.5000 0.5000 0.5000 -0.5000


Obviamente é necessário aplicar uma transformação linear a este resultado
acrescentando +0,5.
5. Obter os pesos e bias da rede:

>> pesos = getx netTreinada (10)

O que nos dá como resultado:


>> getx(netTreinada)

ans =

-4.1700
-5.2568
Pesos da entrada x 1 ligados aos
5.0907
-3.1050 neurônios da camada L1 w11 a w 15
0.7185
-4.6902
3.3991
Pesos da entrada x 2 ligados aos
-3.5927
5.3932 neurônios da camada L1: w 21 a w25 Camada L 1
6.2007
3.1088
1.5715 Polarização (bias) dos neurônios
-0.0456 da camada L1: b1 a b5
-1.7559
3.1650
0.6421
0.0474 Pesos dos neurônios da camada
0.7220 L1 w 1 a w 5 ligados ao neurônio de
0.6810 L2 Camada L2
-0.0014
-0.0845 Polarização (bias) do neurônio da
camada L2: b1

Figura 3: Estrutra do vetor de pesos

Resumindo, para cada camada de neurônios, temos os pesos e em seguida os valores de


polarização.

5. Carregando uma rede criada com pesos:

>> net = setx net, pesos (11)

Exercício baseado no exemplo proposto por Haykin (2001), conforme a Figura 4:

>> pesos=[1;1;1;1;-1.5;-0.5;-2;1;-0.5]

>> pesos

pesos =

1.0000
1.0000
1.0000
1.0000
-1.5000
-0.5000
-2.0000
1.0000
-0.5000
>> net=newff([0,1;0,1],[2,1],{'hardlim','hardlim'})

>> net=setx(net,pesos)

>> x=[1,1,0,0;1,0,1,0]

>> y=sim(net,x)

y =

0 1 1 0

...::: >> F I M<< :::...

Você também pode gostar