【问题标题】:Lost type in PyTorch optimizationPyTorch 优化中的丢失类型
【发布时间】:2021-12-18 00:16:05
【问题描述】:

我正在尝试在 PyTorch 中实现一个简单的最小化器,代码如下:

for i in range(10):
    print('i =', i, ' q =', q)
    v_trans = transform_dq(v, q)
    loss = mse(v_trans, v_target)
    loss.backward()
    q = q - eta * q.grad

print('Final q = ', q)

其中 v 和 q 是张量,且 eta = 0.01。

问题是在q = q - eta * q.grad 行,我在循环的第二次迭代中遇到错误:

TypeError: unsupported operand type(s) for *: 'float' and 'NoneType'

看起来 q 的更新以不希望的方式更改了图形(q 不再是图形的叶子,因此它没有渐变)。如果是这样的话,那么如何实现这个简单的最小化器呢?

【问题讨论】:

    标签: python optimization pytorch gradient gradient-descent


    【解决方案1】:

    首先,您需要在每次迭代之前重置q 的渐变。
    其次,你应该在“梯度范围”之外更新q

    with torch.no_grad():
        q = q - eta * q.grad
    

    【讨论】:

    • 感谢您的回答!如何重置渐变?
    • @Notin_sensus 试试q.grad = None
    猜你喜欢
    • 2019-11-12
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 2021-12-03
    • 2020-08-31
    • 1970-01-01
    相关资源
    最近更新 更多