PyTorch:在哪种情况下,hook可以返回None梯度?
下面是一个使用PyTorch:在哪种情况下,hook可以返回None梯度?,pytorch,Pytorch,下面是一个使用register\u hook和nn.Module的示例,我还使用.grad对丢失后的权重进行了双重检查。backward(): 输出: a.size() torch.Size([5]) b.size() torch.Size([6]) DEBUG: grad hook torch.Size([6, 5]) grad.size(): torch.Size([6, 5]) a.size() torch.Size([5]) b.size() torch.Size([5]) grad.
register\u hook
和nn.Module
的示例,我还使用.grad
对丢失后的权重进行了双重检查。backward()
:
输出:
a.size() torch.Size([5])
b.size() torch.Size([6])
DEBUG: grad hook torch.Size([6, 5])
grad.size(): torch.Size([6, 5])
a.size() torch.Size([5])
b.size() torch.Size([5])
grad.size(): None
下面是一个更复杂的例子,使用torch.no_grad()
(所以不调用hook):
输出:
a.size() torch.Size([5])
b.size() torch.Size([6])
DEBUG: grad hook torch.Size([6, 5])
grad.size(): torch.Size([6, 5])
a.size() torch.Size([5])
b.size() torch.Size([5])
grad.size(): None
这些输出是有效的,在第二个示例中,当gradient为None()时,不会调用hook
但是在实际的大项目中,我也有<代码> Trask.NoGead()/Cux>在体系结构中间的某个地方(我不能在简单的例子中复制),我从代码中得到了<代码>没有< /代码>形状,并且从<代码>中得到了有效的形状。(我希望在
loss.backward()
)之后,.grad
中的hook不调用,并且None
形状,那么hook为什么可以返回None
形状呢
另外,如果我只想检查梯度是否不是None
使用register\u hook
而不是。grad
在loss.backward()