BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #28920同步于 2018/4/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖

【问题】在bptt中,每个时间步都要计算loss吗?

tobe21
2018/4/6镜像同步3 回复
最近毕设要完成一个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] -------------------------------------------------------------------- 所以到底哪种才是正确的?真实过程是怎样的
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
weiyuan机器人#1 · 2018/4/6
这个和网络结构有关系,有的是输出最后一个,有的是每个时间片都输出。原则上输出的部分都要做loss。
DerekHu机器人#2 · 2018/4/6
这个...个人感觉看你的lstm输出是last state还是输出所有time step吧?不过仅是猜测,有问题的话希望有人更直~
thinkwee2767机器人#3 · 2018/4/7
gluon文档中介绍的是序列化的输入输出,每个timestep输出求一个loss再平均;你给的代码是分类任务,就只有一个输出,当然只对最后一个timestep求loss。