[neural network toolbox] activité des neurones à l'intérieur du réseau
Bonjour à tous,
Voilà, j'ai entrainer un réseau de type feedforward (commande : newff) avec un entrainement de Levenberg-Marquardt backpropagation (commande : trainlm).
Il est composé de 19 entrées et 14 sorties ace 17 neurones dans la couche cachée. la fonction d'activation des neurones de la couche cachée est une "Hyperbolic tangent sigmoid transfer function" (commande "tansig") et pour la couche de sortie une "Linear transfer function" (commande "purelin").
Le code qui m'a permis d'entrainer ce réseau est le suivant :
Code:
1 2 3 4 5
| input = Adesort(:,3:21)';
output = Adesort(:,22:end)';
net=newff(input,output,17);
net=train(net,input,output); |
Voici ce que j'ai fait pour tenter de retrouver dans un premier temps la sortie de mon réseau de manière à être sûr de l'activité retrouvée dans la couche cachée :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| function activity = simulate_RDN(net,input)
%%
load net_RDN
input = ones(1,19);
% pour voir la représentation du réseau
view(net)
% mise en forme du vecteur d'entré (en ligne)
if size(input,2) == 1
input = input';
end
% calule de l'activité des neurones de la couche cachée
num_layer = 1; % indice couche cachée
for a=1:net.Layers{num_layer}.size
if strcmp(net.Layers{num_layer}.transferFcn,'tansig')
activity.HL(a) = tansig(sum(input.*net.IW{num_layer}(a,:)) + net.b{num_layer}(a));
elseif strcmp(net.Layers{icc}.transferFcn,'logsig')
activity.HL(a) = logsig(sum(input.*net.IW{num_layer}(a,:)) + net.b{num_layer}(a));
end
end
% mise en forme du vecteur d'entré (en ligne)
if size(activity.HL,2) == 1
activity.HL = activity.HL';
end
% calule de l'activité des neurones de la couche de sortie
num_layer = 2;
for b=1:net.Layers{num_layer}.size
if strcmp(net.Layers{num_layer}.transferFcn,'purelin')
activity.OL(b) = sum(activity.HL.*net.LW{num_layer,1}(b,:)) + net.b{num_layer}(b);
end
end
input= ones(19,1);
output = sim(net,input)
activity.OL' |
Vous pouvez accéder au réseau de neurones entrainé là
validité de 15jours
Utilisateur : hey69pbk
Mot de passe : g2u8s2l3
En ne trouvant pas la même sortie, j'ai voulu voir les paramètres de mon réseau et en utilisant ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| net.inputs{1}
ans =
exampleInput: [19x3200 double]
name: 'Input'
processFcns: {'fixunknowns' 'removeconstantrows' 'mapminmax'}
processParams: {[1x1 struct] [1x1 struct] [1x1 struct]}
processSettings: {[1x1 struct] [1x1 struct] [1x1 struct]}
processedRange: [19x2 double]
processedSize: 19
range: [19x2 double]
size: 19
userdata: [1x1 struct] |
On peut voir qu'il y a des "processFcns" qui sont utilisés et que je n'ai pas codé ci-dessus. Mon problème est que même en codant le "mapminmax" qui est, pour moi, une normalisation des données d'entrée, je ne retrouve pas non plus la sortie désirée (avec "sim")...
Si quelqu'un pouvait m'aider à y voir plus clair ou si vous trouvez une fonction qui me permet d'avoir accès à l'activité des neurones à l'intérieur du réseau, ce serait excellent.
Merci pour votre
Christophe