如何使用PyTorch打印网络回传梯度?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。需求:打印梯度,检查网络学习情况net = your_network()
如何使用PyTorch打印网络回传梯度?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
打印梯度,检查网络学习情况
net = your_network().cuda()def train(): ... outputs = net(inputs) loss = criterion(outputs, targets) loss.backward() for name, parms in net.named_parameters(): print('-->name:', name, '-->grad_requirs:',parms.requires_grad, \ ' -->grad_value:',parms.grad) ...
name表示网络参数的名字; parms.requires_grad 表示该参数是否可学习,是不是frozen的; parm.grad 打印该参数的梯度值。
补充:pytorch的梯度计算
import torchfrom torch.autograd import Variablex = torch.Tensor([[1.,2.,3.],[4.,5.,6.]]) #grad_fn是Nonex = Variable(x, requires_grad=True)y = x + 2z = y*y*3out = z.mean()#x->y->z->outprint(x)print(y)print(z)print(out)#结果:tensor([[1., 2., 3.], [4., 5., 6.]], requires_grad=True)tensor([[3., 4., 5.], [6., 7., 8.]], grad_fn=<AddBackward>)tensor([[ 27., 48., 75.], [108., 147., 192.]], grad_fn=<MulBackward>)tensor(99.5000, grad_fn=<MeanBackward1>)
若是关于graph leaves求导的结果变量是一个标量,那么gradient默认为None,或者指定为“torch.Tensor([1.0])”
若是关于graph leaves求导的结果变量是一个向量,那么gradient是不能缺省的,要是和该向量同纬度的tensor
out.backward()print(x.grad)#结果:tensor([[3., 4., 5.], [6., 7., 8.]])#如果是z关于x求导就必须指定gradient参数:gradients = torch.Tensor([[2.,1.,1.],[1.,1.,1.]])z.backward(gradient=gradients)#若z不是一个标量,那么就先构造一个标量的值:L = torch.sum(z*gradient),再关于L对各个leaf Variable计算梯度#对x关于L求梯度x.grad#结果:tensor([[36., 24., 30.], [36., 42., 48.]])
z.backward()print(x.grad) #报错:RuntimeError: grad can be implicitly created only for Scalar outputs只能为标量创建隐式变量 x1 = Variable(torch.Tensor([[1.,2.,3.],[4.,5.,6.]])) x2 = Variable(torch.arange(4).view(2,2).type(torch.float), requires_grad=True)c = x2.mm(x1)c.backward(torch.ones_like(c))# c.backward()#RuntimeError: grad can be implicitly created only for scalar outputsprint(x2.grad)
1.PyTorch是相当简洁且高效快速的框架;2.设计追求最少的封装;3.设计符合人类思维,它让用户尽可能地专注于实现自己的想法;4.与Google的Tensorflow类似,FAIR的支持足以确保PyTorch获得持续的开发更新;5.PyTorch作者亲自维护的论坛 供用户交流和求教问题6.入门简单
看完上述内容,你们掌握如何使用pytorch打印网络回传梯度的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!
--结束END--
本文标题: 如何使用pytorch打印网络回传梯度
本文链接: https://lsjlt.com/news/276590.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0