首页 > 解决方案 > 使用 Pytorch 的梯度矩阵 (NxWxEPOCH)

问题描述

我正在尝试使用参数和 EPOCH 的每个观察值的梯度创建一个梯度矩阵。如果我的模型有 100 个 obs、1000 个参数和 10 个 Epoch,我的矩阵应该是 (100,1000,10)。

问题是我无法获得那些渐变。参数和观察设置为 required_gradient=True。

在每次观察通过网络后,我都尝试运行它:

 for p in net.parameters():
     paramgradlist.append(p.grad)

但是对于所有观察,每个参数的梯度保持不变。

谢谢

标签: pytorchgradient

解决方案


您不是在复制数据,而是存储对渐变的引用。最后,这意味着您的所有观察结果都是相同的(梯度的最终值)。

相反,您可以在将渐变附加到列表之前克隆它们:

for p in net.parameters():
    paramgradlist.append(p.grad.clone())

推荐阅读