https://www.jb51.net/article/177479.htm
https://blog.csdn.net/weixin_44058333/article/details/92691656
params = list(net.named_parameters()) # get the index by debuging
for i in range(len(params)):
print(i,params[i][1].data.sum(),params[i][0]) # data
打印文件:
params = list(net.named_parameters()) # get the index by debuging
param_str="\n"
for i in range(len(params)):
param_str += ( params[i][0] + ";") # data
with open("param_file.txt", 'a+') as f_write:
f_write.write(param_str)
param_str = "\n"
for i in range(len(params)):
param_str+=(str(float(params[i][1].data.sum()))+";") # data
隐藏层梯度:
我们在训练神经网络时, 有时会发现自己的网络学习不到东西,loss不下降或者下降很慢,这时除了检查修改学习率以外还有可能是碰见了梯度消失的问题。检查是否发生梯度消失最好的方法其实就是将梯度值打印出来,这里就讲讲如何在pytorch中打印出隐藏层的参数。
利用pytorch中register_hook函数可以打印出梯度,下面官方文档对这个函数的例子:
>>> v = Variable(torch.Tensor([0, 0, 0]), requires_grad=True)
>>> h = v.register_hook(lambda grad: grad * 2) # double the gradient
>>> v.backward(torch.Tensor([1, 1, 1]))
>>> v.grad.data
在这个例子中,v是输入,这里计算的是v的梯度。如果要打印出隐藏层的梯度,则v应该是隐藏层的参数。那么接下来就是要选择出需要打印梯度的那一层的参数。
for item in net.named_parameters():
if item[0] == 'fc.2.fc.weight':
h = item[1].register_hook(lambda grad: print(grad))