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()來替代

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM