问题描述
在训练神经网络的时候,在
...
loss_sum = torch.sum(...)
self.optimizer.zero_grad()
-->loss_sum.mean().backward()
self.optimizer.step()
...
报错
RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn
尝试解决
情况一
这是由于PyTorch在创建张量的时候默认requires_grad=False,这时候我们需要手动设置一下
loss_sum = torch.sum(...)
-->loss_sum.requires_grad_(True)
self.optimizer.zero_grad()
loss_sum.mean().backward()
self.optimizer.step()
情况二
第二种情况是由于自己设置的原因,可能是因为自己在训练函数前面加了@torch.no_grad()
@torch.no_grad()
def train():
pass
这时候可以看情况把这个去掉,或者使用with torch.no_grad()
def train():
...
with torch.no_grad():
...
...
pass
稍微具体一些的说明可以移步【pytorch系列】 with torch.no_grad():用法详解。
|