I ont un ensemble de données de jouet avec une entrée et une sortie, les entrées sont 0 ou 1 s aléatoires et la sortie est égale à l'entrée à partir de 3 échantillons précédentsLSTM modèle dans la flamme pas d'apprentissage
Input, Output
0,1
1,1
0,0
1,0
0,1
0,0
Modèle 1:
lstm = nn.Sequential()
lstm:add(nn.LSTM(1,20,8))
lstm:add(nn.Linear(20,100))
lstm:add(nn.Sigmoid())
lstm:add(nn.Linear(100,1))
lstm:add(nn.Sigmoid())
Modèle 2:
lstm = nn.Sequencer(
nn.Sequential()
:add(nn.LSTM(1,100))
:add(nn.Linear(100,1))
:add(nn.Sigmoid())
)
Critère:
criterion = nn.BCECriterion()
trainer = nn.StochasticGradient(lstm, criterion)
trainer.learningRate = .01
trainer.maxIteration = 25
Le premier modèle n'apprend pas et la seconde ne fonctionne pas (possible parce que mes données sont le mauvais type pour un Séquenceur?)
modifier:
Formation:
lstm:training()
print("Training")
for epoch=1, 5 do
err = 0
for i = 1,data:size() do
input = {}
output = {}
table.insert(input, data[i][1])
table.insert(output, data[i][2])
--input = data[i][1]
--output = data[i][2]
err = err + criterion:forward(lstm:updateOutput(input)[1], output)
lstm:zeroGradParameters()
lstm:backward(input, {criterion:backward(lstm.output[1], output)})
lstm.modules[1]:backwardThroughTime()
lstm:updateParameters(0.01)
lstm.modules[1]:forget()
end
print (err/data:size())
end
Je reçois maintenant une erreur lors de l'exécution du modèle 2 grâce à la formation. L'erreur
AbstractRecurrent.lua: 61: Missing gradInput
se produit sur la ligne
lstm.modules [1]: backwardThroughTime()
Salut, je ne suis pas sûr du premier modèle. Pour le second modèle, votre entrée doit être une table. Quelque chose comme, 'input = {}' et 'input [1] = torch.zeros (1,1)' et 'input [1] [1] = 0' et ainsi de suite. Alors 'lstm: forward (entrée)' fonctionnera. –
Merci Rudra! Je reçois maintenant une erreur lorsque j'essaie de retourner en arrièreThroughTime() (voir les modifications ci-dessus) – Adam12344