Closed freakeinstein closed 8 years ago
require 'rnn'
mod = nn.Sequencer(nn.LSTM(10,10))
criterion = nn.SequencerCriterion(nn.MSECriterion())
data_in = torch.split(torch.randn(10,10),1)
data_out = torch.split(torch.randn(10,10),1)
param,grads = mod:getParameters()
mod:training()
for i=1,2 do
mod:zeroGradParameters()
out = mod:forward(data_in)
error = criterion:forward(out,data_out)
grad = criterion:backward(out,data_out)
mod:backward(data_in,grad)
print(param[20],grads[20])
mod:updateParameters(0.001)
print(param[20],grads[20])
end
Forward your entire sequence at once (like above). Or use remember('both')
to tell the rnn
to remember the hidden states between successive calls to forward
:
require 'rnn'
mod = nn.Sequencer(nn.Sequential():add(nn.LSTM(10,10)))
criterion = nn.MSECriterion()
data_in = torch.split(torch.randn(10,10),1)
data_out = torch.split(torch.randn(10,10),1)
param,grads = mod:getParameters()
mod:remember()
for i = 1,#data_in do
mod:training()
mod:zeroGradParameters()
out = mod:forward(data_in[i])
error = criterion:forward(out,data_out[i])
grad = criterion:backward(out,data_out[i])
mod:backward(data_in[i],grad)
print(param[20],grads[20])
mod:updateParameters(0.001)
print(param[20],grads[20])
end
and when and where to apply forget() ?
Hi, I've edited my issue, 'cause I've resolved some part of it. Here are its unresolved parts:
nn.LSTM()
. But when I use ann.Linear()
it works. Why?