網(wǎng)站首頁 編程語言 正文
參考
TORCH.LOAD
torch.load()
函數(shù)格式為:torch.load(f, map_location=None, pickle_module=pickle, **pickle_load_args)
,一般我們使用的時候,基本只使用前兩個參數(shù)。
模型的保存
模型保存有兩種形式,一種是保存模型的state_dict()
,只是保存模型的參數(shù)。那么加載時需要先創(chuàng)建一個模型的實例model
,之后通過torch.load()
將保存的模型參數(shù)加載進來,得到dict
,再通過model.load_state_dict(dict)
將模型的參數(shù)更新。
另一種是將整個模型保存下來,之后加載的時候只需要通過torch.load()
將模型加載,即可返回一個加載好的模型。
具體可參考:PyTorch模型的保存與加載。
模型加載中的map_location參數(shù)
具體來說,map_location
參數(shù)是用于重定向,比如此前模型的參數(shù)是在cpu
中的,我們希望將其加載到cuda:0
中?;蛘呶覀冇卸鄰埧ǎ敲次覀兙涂梢詫⒖?中訓(xùn)練好的模型加載到卡2中,這在數(shù)據(jù)并行的分布式深度學(xué)習(xí)中可能會用到。
首先定義一個AlexNet,并使用cuda:0
將其訓(xùn)練了一個貓狗分類,之后把模型存儲起來。
map_location=None
我們先把state_dict
加載進來。
model_path = "./cuda_model.pth" model = torch.load(model_path) print(next(model.parameters()).device)
結(jié)果為:
cuda:0
因為保存的時候就是模型就是cuda:0
的,所以加載進來也是。
map_location=torch.device()
model_path = "./cuda_model.pth" model = torch.load(model_path, map_location=torch.device('cpu')) print(next(model.parameters()).device)
結(jié)果為:
cpu
模型從cuda:0
變成了cpu
。
map_location={xx:xx}
model_path = "./cuda_model.pth" model = torch.load(model_path, map_location={'cuda:0':'cuda:1'}) print(next(model.parameters()).device)
結(jié)果為:
cuda:1
模型從cuda:0
變成了cuda:1
。
model_path = "./cuda_model.pth" model = torch.load(model_path, map_location={'cuda:2':'cpu'}) print(next(model.parameters()).device)
結(jié)果為:
cuda:0
模型還是cuda:0
,并沒有變成cpu
。因為這個map_location
的映射是不對的,原始的模型就是cuda:0
,而映射是cuda:2
到cpu
,是不對的。這種情況下,map_location
返回None
,也就是和不加map_location
相同。
總結(jié)
原文鏈接:https://blog.csdn.net/qq_43219379/article/details/123675375
相關(guān)推薦
- 2022-11-14 Django?ORM?事務(wù)和查詢優(yōu)化的操作方法_python
- 2022-04-02 Docker部署Nginx并配置反向代理_docker
- 2023-06-17 C或C++報錯:ld?returned?1?exit?status報錯的原因及解決方法_C 語言
- 2022-06-12 Flask項目的部署的實現(xiàn)步驟_python
- 2022-07-02 ASP.NET配置文件中自定義節(jié)點_實用技巧
- 2022-05-02 一起來學(xué)習(xí)C++中類的this指針以使用_C 語言
- 2022-08-13 Spring中@Bean注解的作用以及如何使用
- 2022-10-03 利用正則表達式校驗金額最多保留兩位小數(shù)實例代碼_正則表達式
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支