Je suis en train de concevoir une procédure de rétro-proposition ANR avec 22 entrées et 1 sortie (1 ou 0). Le NN a 3 couches et utilise 10 neurones cachés. Quand je cours le NN il change seulement les poids un petit peu et l'erreur totale pour la production est environ 40%. Intially, je pensais que c'était plus ou moins ajusté mais après avoir changé le nombre de neurones cachés, rien n'a changé.Les pondérations dans la rétro-proposition feed-forward ANN ne changent pas
N est le nombre d'entrées (22)
M est le nombre de neurones cachés (10)
Ceci est le code que j'utilise pour backpropagate
oin est la sortie calculée avant la mise en fonction sigmoïde
oout est la sortie après être passé par la fonction sigmoïde
double odelta = sigmoidDerivative(oin) * (TARGET_VALUE1[i] - oout);
double dobias = 0.0;
double doweight[] = new double[m];
for(int j = 0; j < m; j++)
{
doweight[j] = (ALPHA * odelta * hout[j]) + (MU * (oweight[j] - oweight2[j]));
oweight2[j] = oweight[j];
oweight[j] += doweight[j];
} // j
dobias = (ALPHA * odelta) + (MU * (obias - obias2));
obias2 = obias;
obias += dobias;
updateHidden(N, m, odelta);
C'est le code que j'utilise pour changer les neurones cachés.
for(int j = 0; j < m; j++)
{
hdelta = (d * oweight[j]) * sigmoidDerivative(hin[j]);
for(int i = 0; i < n; i++)
{
dhweight[i][j] = (ALPHA * hdelta * inputNeuron[i]) + (MU * (hweight[i][j] - hweight2[i][j]));
hweight2[i][j] = hweight[i][j];
hweight[i][j] += dhweight[i][j];
}
dhbias[j] = (ALPHA * hdelta) + (MU * (hbias[j] - hbias2[j]));
hbias2[j] = hbias[j];
hbias[j] += dhbias[j];
} `
Comment initialisez-vous vos poids? Pourriez-vous nous fournir plus de code - sur comment mettre à jour et initialiser votre réseau? –
Je l'initialise en randomisant les poids entre -1 et 1 – AZstudentCS