【发布时间】:2021-12-18 02:00:23
【问题描述】:
我正在尝试在 PyTorch 中实现一个简单的最小化器,代码如下(v 和 q 和 v_trans 是张量,eta 是 0.01):
for i in range(10):
print('i =', i, ' q =', q)
v_trans = forward(v, q)
loss = error(v_trans, v_target)
q.requires_grad = True
loss.backward()
grads = q.grad
with torch.no_grad()
q = q - eta * grads
print('Final q = ', q)
在循环的第二次迭代中,“loss.backward()”行出现错误:
Traceback (most recent call last):
File "C:\Scripts\main.py", line 97, in <module>
loss.backward()
File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\site-packages\torch\_tensor.py", line 307, in backward
torch.autograd.backward(self, gradient, retain_graph, create_graph, inputs=inputs)
File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\site-packages\torch\autograd\__init__.py", line 154, in backward
Variable._execution_engine.run_backward(
RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn
我已经尝试了几件事,但无法让这个简单的示例工作。是否有关于如何为不涉及神经网络的项目制作简单优化器的教程/指南/文档?或者,如何将 PyTorch 中内置的优化器用于非 NN 项目?
【问题讨论】:
-
v和q是否需要计算梯度? -
@Ivan
q是要优化的张量,所以它确实需要梯度,而v不需要。 -
你能打印
v_trans.grad_fn和loss.grad_fn吗? -
需要在开头设置
q.requires_grad_(True)
标签: python optimization pytorch gradient gradient-descent