gpt4 book ai didi

machine-learning - 在语言建模中,为什么我必须在每个新的训练周期之前 init_hidden 权重? ( torch )

转载 作者:行者123 更新时间:2023-11-30 08:33:07 31 4
gpt4 key购买 nike

我对 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 ?难道模型不应该继承上一个时期的隐藏参数并继续对其进行训练吗?

最佳答案

答案就在 init_hidden 中。它不是隐藏层权重,而是RNN/LSTM中的初始隐藏状态,即公式中的h0。对于每个时期,我们应该重新初始化一个新的初学者隐藏状态,这是因为在测试过程中,我们的模型将没有关于测试句子的信息,并且初始隐藏状态为零。

关于machine-learning - 在语言建模中,为什么我必须在每个新的训练周期之前 init_hidden 权重? ( torch ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55350811/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com