pytorch GPU和CPU模型相互加載方式
1 pytorch保存模型的兩種方式
1.1 直接保存模型并讀取
# 創(chuàng)建你的模型實例對象: model
model = net()
## 保存模型
torch.save(model, 'model_name.pth')
## 讀取模型
model = torch.load('model_name.pth')1.2 只保存模型中的參數(shù)并讀取
## 保存模型
torch.save({'model': model.state_dict()}, 'model_name.pth')
## 讀取模型
model = net()
state_dict = torch.load('model_name.pth')
model.load_state_dict(state_dict['model'])- 第一種方法可以直接保存模型,加載模型的時候直接把讀取的模型給一個參數(shù)就行。
- 第二種方法則只是保存參數(shù),在讀取模型參數(shù)前要先定義一個模型(模型必須與原模型相同的構(gòu)造),然后對這個模型導入?yún)?shù)。雖然麻煩,但是可以同時保存多個模型的參數(shù),而第一種方法則不能,而且第一種方法有時不能保證模型的相同性(你讀取的模型并不是你想要的)。
如何保存模型決定了如何讀取模型,一般來選擇第二種來保存和讀取。
2 GPU / CPU模型相互加載
2.1 單個CPU和單個GPU模型加載
pytorch 允許把在GPU上訓練的模型加載到CPU上,也允許把在CPU上訓練的模型加載到GPU上。
加載模型參數(shù)的時候,在GPU和CPU訓練的模型是不一樣的,這兩種模型是不能混為一談的,下面分情況進行操作說明。
情況一:CPU -> CPU, GPU -> GPU
- GPU訓練的模型,在GPU上使用;
- CPU訓練的模型,在CPU上使用,
這種情況下我們都只用直接用下面的語句即可:
torch.load('model_dict.pth')情況二:GPU -> CPG/GPU
GPU訓練的模型,不知道放在CPU還是GPU運行,兩種情況都要考慮
import torch
from torchvision import models
# 加載預(yù)訓練的GPU模型權(quán)重文件
weights_path = 'model_gpu.pth'
# 定義一個與原模型結(jié)構(gòu)相同的新模型
model = models.resnet50()
# 檢查是否有可用的CUDA設(shè)備
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
# 將權(quán)重映射到相應(yīng)的設(shè)備內(nèi)存并加載到模型中
weights = torch.load(weights_path, map_location=device)
model.load_state_dict(weights)
# 設(shè)置為評估模式
model.eval()
print("Model is successfully loaded and can be used on a", device.type, "!")情況三:CPU -> CPG/GPU
模型是在CPU上訓練的,但不確定要在CPU還是GPU上運行時,兩種情況都要考慮
import torch
from torchvision import models
# 加載預(yù)訓練的CPU模型權(quán)重文件
weights_path = 'model_cpu.pth'
# 定義一個與原模型結(jié)構(gòu)相同的新模型
model = models.resnet50()
# 檢查是否有可用的CUDA設(shè)備
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
# 將權(quán)重映射到相應(yīng)的設(shè)備內(nèi)存并加載到模型中
if device.type == 'cuda':
model.to(device)
weights = torch.load(weights_path, map_location=device)
else:
weights = torch.load(weights_path, map_location='cpu')
model.load_state_dict(weights)
# 設(shè)置為評估模式
model.eval()
print("Model is successfully loaded and can be used on a", device.type, "!")總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Python制作一個端午節(jié)相關(guān)的小游戲
端午節(jié)快樂,今天我將為大家?guī)硪黄嘘P(guān)端午節(jié)的編程文章,希望能夠為大家獻上一份小小的驚喜,我們將會使用Python來實現(xiàn)一個與端午粽子相關(guān)的小應(yīng)用程序,在本文中,我將會介紹如何用Python代碼制做一個“粽子拆解器”,感興趣的小伙伴歡迎閱讀2023-06-06
詳解python數(shù)據(jù)結(jié)構(gòu)之隊列Queue
這篇文章主要介紹了python數(shù)據(jù)結(jié)構(gòu)之隊列Queue,文中有非常詳細的代碼示例,對正在學習python的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05
Python基礎(chǔ)之logging模塊知識總結(jié)
用Python寫代碼的時候,在想看的地方寫個print xx 就能在控制臺上顯示打印信息,這樣子就能知道它是什么了,但是當我需要看大量的地方或者在一個文件中查看的時候,這時候print就不大方便了,所以Python引入了logging模塊來記錄我想要的信息,需要的朋友可以參考下2021-05-05
Python制作數(shù)據(jù)預(yù)測集成工具(值得收藏)
這篇文章主要介紹了Python如何制作數(shù)據(jù)預(yù)測集成工具,幫助大家進行大數(shù)據(jù)預(yù)測,感興趣的朋友可以了解下2020-08-08
基于并發(fā)服務(wù)器幾種實現(xiàn)方法(總結(jié))
下面小編就為大家分享一篇基于并發(fā)服務(wù)器幾種實現(xiàn)方法(總結(jié)),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12
Python 使用 MySQL 數(shù)據(jù)庫進行事務(wù)處理完整示例
本文介紹了Python中使用MySQL進行事務(wù)處理的基本概念和步驟,包括事務(wù)的核心概念(ACID原則)、事務(wù)處理代碼示例、關(guān)鍵操作解釋以及拓展場景,感興趣的朋友跟隨小編一起看看吧2026-01-01

