我正在使用Google colab。我想转换.pt模型从我的谷歌驱动器到.h5模型。我遵循链接https://github.com/gmalivenko/pytorch2keras和https://www.programmersought.com/article/57938937172/并安装库,还编写如下代码:
%pip install pytorch2keras
%pip install onnx==1.8.1
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)
但它给我的错误如下:
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
发布于 2021-07-29 23:07:28
啊,PyTorch to Tensorflow的经典问题。多年来,许多库来来去去,但我发现ONNX的工作最一致。你可以试试这样的东西。
特定于PyTorch的是Dynamic Computational Graph。动态计算图意味着PyTorch模型可以动态适应不同的输入大小。您可以指定需要动态调整大小的轴。下面是一些将CNN从PyTorch转换为ONNX的最小代码。
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)
还可以将模型的高度和宽度设置为动态输入大小
dynamic_axes['input0'][2] = 'height'
dynamic_axes['input0'][3] = 'width'
接下来,我们将ONNX模型转换为Tensorflow SavedModel。
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。
发布于 2021-07-29 14:03:46
看起来您一开始就没有导入pytorch_to_keras方法。此外,作为第一个参数,您可能需要提供实际的模型,而不是模型路径。尽管如此,我还是不熟悉这个库。
https://stackoverflow.com/questions/68577156
复制相似问题