J'ai le brouillon suivant pour une classe de réseau de neurones. Ce réseau de neurones devrait apprendre avec TD-lambda. Il est démarré en appelant la fonction getRating().Delphi: EInvalidOp dans la classe de réseau neuronal (TD-lambda)
Mais malheureusement, il y a une EInvalidOp (opération de point de floading non valide) erreur après environ 1000 itérations dans les lignes suivantes:
neuronsHidden[j] := neuronsHidden[j]+neuronsInput[t][i]*weightsInput[i][j]; // input -> hidden
weightsHidden[j][k] := weightsHidden[j][k]+LEARNING_RATE_HIDDEN*tdError[k]*eligibilityTraceOutput[j][k]; // adjust hidden->output weights according to TD-lambda
Pourquoi cette erreur? Je ne peux pas trouver l'erreur dans mon code :(Pouvez-vous me aider? Merci beaucoup à l'avance!
learningMode: Boolean; // does the network learn and change its weights?
neuronsInput: Array[1..MAX_TIMESTEPS] of Array[1..NEURONS_INPUT] of Extended;
neuronsHidden: Array[1..NEURONS_HIDDEN] of Extended;
neuronsOutput: Array[1..NEURONS_OUTPUT] of Extended;
weightsInput: Array[1..NEURONS_INPUT] of Array[1..NEURONS_HIDDEN] of Extended;
weightsHidden: Array[1..NEURONS_HIDDEN] of Array[1..NEURONS_OUTPUT] of Extended;
[...]
function HyperbolicTangent;
begin
if x > 5500 then // prevent overflow
result := 1
else
result := (Exp(2*x)-1)/(Exp(2*x)+1);
end;
[...]
Êtes-vous toujours intéressé par une réponse à cette question? –
Oui, je le suis, définitivement. Mais depuis que j'ai remplacé les variables étendues par des variables réelles, il n'y a plus d'erreur. Je ne sais pas si c'est juste une coïncidence. Pourquoi cela devrait-il résoudre le problème? – caw