pytorch加載和保存模型


在模型完成訓練后,我們需要將訓練好的模型保存為一個文件供測試使用,或者因為一些原因我們需要繼續之前的狀態訓練之前保存的模型,那么如何在PyTorch中保存和恢復模型呢?

方法一(推薦):

第一種方法也是官方推薦的方法,只保存和恢復模型中的參數。

保存    

torch.save(the_model.state_dict(), PATH)

恢復

the_model = TheModelClass(*args, **kwargs)
the_model.load_state_dict(torch.load(PATH))

使用這種方法,我們需要自己導入模型的結構信息。

方法二:

使用這種方法,將會保存模型的參數和結構信息。

保存

torch.save(the_model, PATH)

恢復

the_model = torch.load(PATH)

一個相對完整的例子

saving

torch.save({
'epoch': epoch + 1,
'arch': args.arch,
'state_dict': model.state_dict(),
'best_prec1': best_prec1,
}, 'checkpoint.tar' )

loading

if args.resume:
if os.path.isfile(args.resume):
print("=> loading checkpoint '{}'".format(args.resume))
checkpoint = torch.load(args.resume)
args.start_epoch = checkpoint['epoch']
best_prec1 = checkpoint['best_prec1']
model.load_state_dict(checkpoint['state_dict'])
print("=> loaded checkpoint '{}' (epoch {})"
.format(args.evaluate, checkpoint['epoch']))
 

獲取模型中某些層的參數

對於恢復的模型,如果我們想查看某些層的參數,可以:

# 定義一個網絡
from collections import OrderedDict
model = nn.Sequential(OrderedDict([
('conv1', nn.Conv2d(1,20,5)),
('relu1', nn.ReLU()),
('conv2', nn.Conv2d(20,64,5)),
('relu2', nn.ReLU())
]))
# 打印網絡的結構
print(model)
 
OUT:
Sequential (
(conv1): Conv2d(1, 20, kernel_size=(5, 5), stride=(1, 1))
(relu1): ReLU ()
(conv2): Conv2d(20, 64, kernel_size=(5, 5), stride=(1, 1))
(relu2): ReLU ()
)
 
如果我們想獲取conv1的weight和bias:
 
params=model.state_dict()
for k,v in params.items():
print(k) #打印網絡中的變量名
print(params['conv1.weight']) #打印conv1的weight
print(params['conv1.bias']) #打印conv1的bias
 



免責聲明!

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



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