<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
將PyTorch模型轉換為ONNX格式可以使它在其他框架中使用,如TensorFlow、Caffe2和MXNet
首先安裝以下必要元件:
建議使用conda
環境,執行以下命令來建立一個新的環境並啟用它:
conda create -n onnx python=3.8 conda activate onnx
接下來使用以下命令安裝PyTorch和ONNX:
conda install pytorch torchvision torchaudio -c pytorch pip install onnx
可選地,可以安裝ONNX Runtime以驗證轉換工作的正確性:
pip install onnxruntime
將需要轉換的模型匯出為PyTorch模型的.pth
檔案。使用PyTorch內建的函數載入它,然後呼叫eval()方法以保證close狀態:
import torch.nn as nn import torch.nn.functional as F import torch.optim as optim import torch.onnx import torchvision.transforms as transforms import torchvision.datasets as datasets class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(3, 6, 5) self.pool = nn.MaxPool2d(2, 2) self.conv2 = nn.Conv2d(6, 16, 5) self.fc1 = nn.Linear(16 * 5 * 5, 120) self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 10) def forward(self, x): x = self.pool(F.relu(self.conv1(x))) x = self.pool(F.relu(self.conv2(x))) x = x.view(-1, 16 * 5 * 5) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x net = Net() PATH = './model.pth' torch.save(net.state_dict(), PATH) model = Net() model.load_state_dict(torch.load(PATH)) model.eval()
現在需要定義輸入和輸出節點,這些節點由匯出的模型中的張量名稱表示。將使用PyTorch內建的函數torch.onnx.export()
來將模型轉換為ONNX格式。下面的程式碼片段說明如何找到輸入和輸出節點,然後傳遞給該函數:
input_names = ["input"] output_names = ["output"] dummy_input = torch.randn(batch_size, input_channel_size, input_height, input_width) # Export the model torch.onnx.export(model, dummy_input, "model.onnx", verbose=True, input_names=input_names, output_names=output_names)
執行上述程式時可能遇到錯誤資訊,其中包括一些與節點的名稱和形狀相關的警告,甚至還有Python版本、庫、路徑等資訊。在處理完這些錯誤後,就可以轉換PyTorch模型並立即獲得ONNX模型了。輸出ONNX模型的檔名是model.onnx
。
現在,使用ONNX模型檢查一下是否成功地將其從PyTorch匯出到ONNX,可以使用TensorFlow或Caffe2進行驗證。以下是一個簡單的範例,演示如何使用TensorFlow來載入和執行該模型:
import onnxruntime as rt import numpy as np sess = rt.InferenceSession('model.onnx') input_name = sess.get_inputs()[0].name output_name = sess.get_outputs()[0].name np.random.seed(123) X = np.random.randn(batch_size, input_channel_size, input_height, input_width).astype(np.float32) res = sess.run([output_name], {input_name: X})
這應該可以順利地執行,並且輸出與原始PyTorch模型具有相同的形狀(和數值)。
最好的方法是比較PyTorch模型與ONNX模型在不同框架中推理的結果。如果結果完全匹配,則幾乎可以肯定地說PyTorch到ONNX轉換已經成功。以下是通過PyTorch和ONNX檢查模型推理結果的一個小程式:
# Test the model with PyTorch model.eval() with torch.no_grad(): Y = model(torch.from_numpy(X)).numpy() # Test the ONNX model with ONNX Runtime sess = rt.InferenceSession('model.onnx') res = sess.run(None, {input_name: X})[0] # Compare the results np.testing.assert_allclose(Y, res, rtol=1e-6, atol=1e-6)
以上就是PyTorch模型轉換為ONNX格式的詳細內容,更多關於PyTorch模型轉換為ONNX格式的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45