pytorch - 使用 Pytorch 的梯度矩阵 (NxWxEPOCH)
问题描述
我正在尝试使用参数和 EPOCH 的每个观察值的梯度创建一个梯度矩阵。如果我的模型有 100 个 obs、1000 个参数和 10 个 Epoch,我的矩阵应该是 (100,1000,10)。
问题是我无法获得那些渐变。参数和观察设置为 required_gradient=True。
在每次观察通过网络后,我都尝试运行它:
for p in net.parameters():
paramgradlist.append(p.grad)
但是对于所有观察,每个参数的梯度保持不变。
谢谢
解决方案
您不是在复制数据,而是存储对渐变的引用。最后,这意味着您的所有观察结果都是相同的(即梯度的最终值)。
相反,您可以在将渐变附加到列表之前克隆它们:
for p in net.parameters():
paramgradlist.append(p.grad.clone())
推荐阅读
- javascript - Problem with .env file being read in javascript project
- node.js - 在 firebase 函数中以特定顺序执行 axios / firebase 承诺的正确方法是什么?
- c# - UnityAction 丢失订阅事件
- go - 为什么 strings.Builder 在我的测试程序中附加字符串比 fmt.Sprint 慢?
- python - Serializing data with marshmallow if data key is unknown
- html - Element's property align-itself is not working
- android - 当它实际上不是空时从 Firestore 中检索空对象
- android - 添加firebase依赖项后无法构建项目
- c# - 如何在 C# 方法中调用停止以继续(如 Unity UNet 命令、RPC)
- mongodb - Merging fields from two different document in MongoDB