问题出在我的训练循环中:它不会在批次之间分离或重新包装隐藏状态?如果是这样,则
loss.backward()尝试一直反向传播直到时间开始,该时间适用于第一批而不适用于第二批,因为第一批的图形已被丢弃。
有两种可能的解决方案。
1)在批次之间分离/重新包装隐藏状态。至少有三种方法可以做到这一点(我选择了这种解决方案):
hidden.detach_() hidden = hidden.detach()
2)将loss.backward()替换为,
loss.backward(retain_graph=True)但知道每个连续的批处理都将比前一个批处理花费更多的时间,因为它将必须一直反向传播直到第一个批处理的开始。
例
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)