У меня есть вопрос по поводу следующего кода в моделировании языка Pytorch:
print("Training and generating...")
for epoch in range(1, config.num_epochs + 1):
total_loss = 0.0
model.train()
hidden = model.init_hidden(config.batch_size)
for ibatch, i in enumerate(range(0, train_len - 1, seq_len)):
data, targets = get_batch(train_data, i, seq_len)
hidden = repackage_hidden(hidden)
model.zero_grad()
output, hidden = model(data, hidden)
loss = criterion(output.view(-1, config.vocab_size), targets)
loss.backward()
Пожалуйста, проверьте строку 5.
И функция init_hidden выглядит следующим образом:
def init_hidden(self, bsz):
weight = next(self.parameters()).data
if self.rnn_type == 'LSTM': # lstm:(h0, c0)
return (Variable(weight.new(self.n_layers, bsz, self.hi_dim).zero_()),
Variable(weight.new(self.n_layers, bsz, self.hi_dim).zero_()))
else: # gru & rnn:h0
return Variable(weight.new(self.n_layers, bsz, self.hi_dim).zero_())
Мой вопрос:
Зачем нам нужно init_hidden каждую эпоху?Не должно ли быть так, что модель унаследует скрытые параметры из прошлой эпохи и продолжит обучение по ним.