首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从.pt模型到.h5模型的转换

从.pt模型到.h5模型的转换
EN

Stack Overflow用户
提问于 2021-07-29 21:48:45
回答 2查看 49关注 0票数 2

我正在使用Google colab。我想转换.pt模型从我的谷歌驱动器到.h5模型。我遵循链接https://github.com/gmalivenko/pytorch2kerashttps://www.programmersought.com/article/57938937172/并安装库,还编写如下代码:

代码语言:javascript
运行
复制
%pip install pytorch2keras
%pip install onnx==1.8.1
代码语言:javascript
运行
复制
import numpy as np
from numpy import random
from random import uniform
import torch
from torch.autograd import Variable
input_np = np.random.uniform(0, 1, (1, 10, 32, 32))
input_var = Variable(torch.FloatTensor(input_np))
model='/content/gdrive/MyDrive/model.pt'
pytorch_to_keras(model,input_var,input_shapes= [(10, 32, 32,)], verbose=True)

但它给我的错误如下:

代码语言:javascript
运行
复制
WARNING:pytorch2keras:Custom shapes isn't supported now.
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-53-eef217a11c8a> in <module>()
      8 input_var = Variable(torch.FloatTensor(input_np))
      9 model='/content/gdrive/MyDrive/model.pt'
---> 10 pytorch_to_keras(model,input_np,input_shapes= [(10, 32, 32,)], verbose=True)
     11 
     12 

/usr/local/lib/python3.7/dist-packages/pytorch2keras/converter.py in pytorch_to_keras(model, args, input_shapes, change_ordering, verbose, name_policy, use_optimizer, do_constant_folding)
     51     args = tuple(args)
     52 
---> 53     dummy_output = model(*args)
     54 
     55     if isinstance(dummy_output, torch.autograd.Variable):

TypeError: 'str' object is not callable
EN

回答 2

Stack Overflow用户

发布于 2021-07-29 23:07:28

啊,PyTorch to Tensorflow的经典问题。多年来,许多库来来去去,但我发现ONNX的工作最一致。你可以试试这样的东西。

特定于PyTorch的是Dynamic Computational Graph。动态计算图意味着PyTorch模型可以动态适应不同的输入大小。您可以指定需要动态调整大小的轴。下面是一些将CNN从PyTorch转换为ONNX的最小代码。

代码语言:javascript
运行
复制
import onnx
import torch

model = get_model()
model.eval()

# Test model on sample image size 
example_input = torch.randn((1, 3, img_size, img_size), requires_grad=True)
model(example_input)

# Set input and output names, include more names in the list if your model has more than 1 input/output
input_names = ["input0"]
output_names = ["output0"]

# Set dynamic axes (in this case, make the batch a dynamic dimension)
dynamic_axes = {'input0': {0: 'batch'}, 'output0': {0: 'batch'}}

# Export model with the above parameters
torch_out = torch.onnx.export(
    model, example_input, 'model.onnx', export_params=True, input_names=input_names, output_names=output_names, 
    dynamic_axes=dynamic_axes, operator_export_type=torch.onnx.OperatorExportTypes.ONNX
)

# Use ONNX checker to verify integrity of model
onnx_model = onnx.load("model.onnx")
onnx.checker.check_model(onnx_model)

还可以将模型的高度和宽度设置为动态输入大小

代码语言:javascript
运行
复制
dynamic_axes['input0'][2] = 'height'
dynamic_axes['input0'][3] = 'width'

接下来,我们将ONNX模型转换为Tensorflow SavedModel。

代码语言:javascript
运行
复制
from onnx_tf.backend import prepare
import onnx

onnx_model = onnx.load('model.onnx')
tf_model = prepare(onnx_model)
tf_model.export_graph('tf_model')

tf_model现在是Tensorflow SavedModel。

票数 1
EN

Stack Overflow用户

发布于 2021-07-29 14:03:46

看起来您一开始就没有导入pytorch_to_keras方法。此外,作为第一个参数,您可能需要提供实际的模型,而不是模型路径。尽管如此,我还是不熟悉这个库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68577156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档