0705-深度網路模型持久化
目錄- 一、持久化概述
- 二、tensor 物件的保存和加載
- 三、Module 物件的保存和加載
- 四、Optimizer 物件的保存和加載
- 五、所有物件集合的保存和加載
- 六、第七章總結
pytorch完整教程目錄:https://www.cnblogs.com/nickchen121/p/14662511.html
一、持久化概述
在 torch 中,以下物件可以持久化到硬碟,并可以通過相應的方法把這些物件持久化到記憶體中:
- Tensor
- Variable
- nn.Module
- Optimizer
上述物件本質上最后都是保存為 Tensor,并且 Tensor 的保存和加載非常簡單,使用 t.save 和 t.load 即可,
在 save/load 時可指定使用的 pickle 模塊,在 load 時還可以把 GPU tensor 映射到 CPU 或者其他 GPU 上,
我們可以通過 t.save(obj, file_name) 保存任意可序列化的物件,然后通過 obj=t.load(file_name) 方法加載保存的資料,
對于 Module 和 Optimizer 物件,建議保存為對應的 state_dict,而不是直接保存整個 Module/Optimizer 物件,Optimizer 物件保存的是引數和動量資訊,通過加載之前的動量資訊,能夠很有效地減少模型震蕩,
二、tensor 物件的保存和加載
import torch as t
a = t.Tensor(3, 4)
if t.cuda.is_available():
a = a.cuda(1) # 把 a 轉為 GPU1 上的 tensor
t.save(a, 'a.pth')
# 加載為 b,存盤于 GPU1 上(因為保存時 tensor 就在 GPU1 上)
b = t.load('a.pth')
# 加載為 c,存盤于 CPU
c = t.load('a.pth', map_location=lambda storage, loc: storage)
# 加載為 d,存盤于 GPU0 上
d = t.load('a.pth', map_location={'cuda:1': 'cuda:0'})
三、Module 物件的保存和加載
t.set_default_tensor_type('torch.FloatTensor')
from torchvision.models import AlexNet
model = AlexNet()
# module 的 state_dict 是一個字典
model.state_dict().keys()
t.save(model.state_dict(), 'alexnet.pth')
model.load_state_dict(t.load('alexnet.pth'))
<All keys matched successfully>
四、Optimizer 物件的保存和加載
optimizer = t.optim.Adam(model.parameters(), lr=0.1)
t.save(optimizer.state_dict(), 'optimizer.pth')
optimizer.load_state_dict(t.load('optimizer.pth'))
五、所有物件集合的保存和加載
all_data = https://www.cnblogs.com/nickchen121/p/dict(optimizer=optimizer.state_dict(),
model=model.state_dict(),
info=u'模型和優化器的所有引數')
t.save(all_data, 'all.pth')
all_data = https://www.cnblogs.com/nickchen121/p/t.load('all.pth')
all_data.keys()
dict_keys(['optimizer', 'model', 'info'])
六、第七章總結
本章介紹了 torch 的很多工具模塊,主要涉及資料加載、可視化和 GPU 加速相關的內容,合理地使用這些模塊可以極大地提升我們的編碼效率,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/282072.html
標籤:其他
上一篇:趣談網路協議,像看小說一樣的入門
下一篇:0705-深度網路模型持久化
