1 つの入力と 1 つの出力を持つおもちゃのデータセットがあります。入力はランダムな 0 または 1 で、出力は前の 3 つのサンプルからの入力と同じです。
Input, Output
0,1
1,1
0,0
1,0
0,1
0,0
モデル 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())
モデル 2:
lstm = nn.Sequencer(
nn.Sequential()
:add(nn.LSTM(1,100))
:add(nn.Linear(100,1))
:add(nn.Sigmoid())
)
基準:
criterion = nn.BCECriterion()
trainer = nn.StochasticGradient(lstm, criterion)
trainer.learningRate = .01
trainer.maxIteration = 25
最初のモデルは学習せず、2 番目のモデルは機能しません (私のデータがシーケンサーにとって間違った種類である可能性があります)。
編集:
トレーニング:
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
トレーニングを通じてモデル 2 を実行すると、エラーが発生するようになりました。エラー
AbstractRecurrent.lua:61: gradInput がありません
オンラインで発生
lstm.modules[1]:backwardThroughTime()