gpt4 book ai didi

python - PyTorch 中的 `inplace=True` 激活仅对推理模式有意义吗?

转载 作者:行者123 更新时间:2023-12-05 01:56:15 35 4
gpt4 key购买 nike

根据 PyTorch 论坛上的讨论:

inplace=True 的目的是就地 修改输入,而无需为此操作的结果为额外的张量分配内存。

这允许更有效地使用内存,但禁止进行反向传递的可能性,至少在操作减少信息量的情况下。并且反向传播算法需要保存中间激活以更新权重。

可以说,只有当模型已经训练好并且不想再修改它时,才应该分层打开这种模式吗?

最佳答案

nn.ReLU(inplace=True)训练测试 期间节省内存。

但是,当我们在计算梯度时使用 nn.ReLU(iplace=True) 时可能会遇到一些问题。 有时,计算梯度时需要原始值。因为 inplace 破坏了一些原来的值,一些用法可能会有问题:

def forward(self, x):
skip = x
x = self.relu(x)
x += skip # inplace addition
# Error!

以上两个连续的inplace操作会产生错误。

但是,使用 first 添加,then 激活函数和 inplace=True 是没问题的:

def forward(self, x):
skip = x
x += skip # inplace addition
x = self.relu(x)
# No error!

关于python - PyTorch 中的 `inplace=True` 激活仅对推理模式有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69913781/

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