У меня есть игрушка набор данных с одним входом и одним выходом, входы являются случайными 0s или 1s, а выход равен вход от 3 образцов предыдущихLSTM Модель в факел не Изучение
Input, Output
0,1
1,1
0,0
1,0
0,1
0,0
Model 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
Первая модель не учит, а второй не работает (возможно потому, что мои данные неправильный вид на секвенсор?)
редактировать:
Обучение:
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()
Привет, я не уверен в первой модели. Для второй модели ваш вход должен быть таблицей. Что-то вроде: 'input = {}' и 'input [1] = torch.zeros (1,1)' и 'input [1] [1] = 0' и т. Д. Тогда будет работать 'lstm: forward (input)'. –
Спасибо, Рудра! Я получаю сообщение об ошибке, когда я пытаюсь запустить backThroughTime() (см. Правки выше) – Adam12344