问题描述:
我尝试用Pytorch实现一个深度神经网络模型,在backward后尝试获取各层的W和b的梯度时报了一个这样的错误
原因分析:
在经过查找后,我发现require_grad为false的张量默认为叶张量,required_grad属性为True的分为两种情况,若为自己创建的,则为叶张量,若是经过计算得到的,则is_leaf属性为false。
经过查找自己初始化W和b的代码段:
for i in range(L):
parameters["W" + str(i + 1)] = torch.normal(0, 1, (layer_dim[i + 1], layer_dim[i]),
dtype=torch.float32, requires_grad=True) * 0.01
parameters["b" + str(i + 1)] = torch.zeros((layer_dim[i + 1], 1), dtype=torch.float32,
requires_grad=True) * 0.01
在初始化的时候乘了一个0.01,导致W和b成为非叶节点,所以在反向传播时,并没有计算W和b的梯度。