PyTorch学习之自动求导机制-Volatile标志

修改官方文档的错误

 

运行官方文档中的代码可能会报错(维度不一致):

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "e:\Anaconda3\lib\site-packages\torch\nn\modules\module.py", line 489, in __call__
result = self.forward(*input, **kwargs)
File "e:\Anaconda3\lib\site-packages\torchvision\models\resnet.py", line 150, in forward
x = self.conv1(x)
File "e:\Anaconda3\lib\site-packages\torch\nn\modules\module.py", line 489, in __call__
result = self.forward(*input, **kwargs)
File "e:\Anaconda3\lib\site-packages\torch\nn\modules\conv.py", line 320, in forward
self.padding, self.dilation, self.groups)
RuntimeError: Expected 4-dimensional input for 4-dimensional weight [64, 3, 7, 7], but got 2-dimensional input of size [5, 5] instead

因为model需要四维变量,而官方文档中的是二维变量,所以会报错

修改方法:去掉Variable函数,这是0.4版本的函数,我们现在使用的大多数是1.0版本

regular_input=torch.randn(1,3,224,224)#默认是True   
volatile_input=torch.randn(1,3,224,224)
Model=torchvision.models.resnet18(pretrained=True)
Model(regular_input).requires_grad
with torch.no_grad():
Model(volatile_input).requires_grad

总结:(1)requires_grad=Fasle时不需要更新梯度, 适用于冻结某些层的梯度;
volatile=True相当于requires_grad=False,适用于推断阶段,不需要反向传播。这个现在已经取消了,使用with torch.no_grad()来替代

 

转载于:https://www.cnblogs.com/cola-1998/p/10977479.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值