返回信息流最近毕设要完成一个lstm模型,但是训练过程越看越混乱,跑来问问论坛大佬们
在很多介绍bptt的文章中,是每个时刻都计算loss,比如通过时间反向传播 - 动手学深度学习 0.6 文档https://zh.gluon.ai/chapter_recurrent-neural-networks/bptt.html
但是我在实际例子中看到只输出了最后一个时间步的output来计算loss,比如pytorch文档中的例子Classifying Names with a Character-Level RNN
-----------------------------------------------------
def train(category_tensor, line_tensor):
hidden = rnn.initHidden()
rnn.zero_grad()
for i in range(line_tensor.size()[0]):
output, hidden = rnn(line_tensor[i], hidden)
loss = criterion(output, category_tensor)
loss.backward()
# Add parameters' gradients to their values, multiplied by learning rate
for p in rnn.parameters():
p.data.add_(-learning_rate, p.grad.data)
return output, loss.data[0]
--------------------------------------------------------------------
所以到底哪种才是正确的?真实过程是怎样的
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #28920同步于 2018/4/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖
【问题】在bptt中,每个时间步都要计算loss吗?
tobe21
2018/4/6镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
gluon文档中介绍的是序列化的输入输出,每个timestep输出求一个loss再平均;你给的代码是分类任务,就只有一个输出,当然只对最后一个timestep求loss。