PyTorch培训中是否应分离解码器预测?

2024-06-17 12:41:14 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好,我最近开始使用Pytork进行需要编码器-解码器框架的研究。PyTorch在这方面的教程非常精彩,但有一个小问题:当在没有教师强制的情况下训练解码器时,这意味着当前时间步长的预测被用作下一个时间步长的输入,那么预测是否应该被detach

this PyTorch tutorial中使用了detachdecoder_input = topi.squeeze().detach() # detach from history as input ),但在this onetop1 = output.max(1)[1]; output = (trg[t] if teacher_force else top1))中不是这样

这两个教程都是基于RNN的,所以我不确定基于Transformer的体系结构。如果有人能指出哪种做法更好,我将不胜感激:)


Tags: 框架inputoutput时间教程教师pytorch编码器
1条回答
网友
1楼 · 发布于 2024-06-17 12:41:14

是的,你应该把它拆开。分离张量会将其从计算图中移除,因此它不再根据梯度计算进行跟踪,这正是您想要的。因为前面的标记可以被看作是定义起点的常量,所以在一个时间步之后它将被丢弃。但是,如果不分离它,它仍然会挂起,因为它在计算图中被跟踪,这会消耗不必要的内存

实际上,内存开销通常很小,因此只有当您有很多时间步长并且处于GPU内存使用的上限时,才会注意到它。只需将其视为微观优化

在某些情况下,您绝对需要分离张量以避免不必要的反向传播,但这通常发生在两个不同的模型中使用相同的输入时,因为默认情况下反向消耗图形,并且如果两个不同的反向传播尝试通过相同的路径,它将不再可用并失败

相关问题 更多 >