【问题标题】:Converting From .pt model to .h5 model从 .pt 模型转换为 .h5 模型
【发布时间】:2021-10-05 04:25:03
【问题描述】:

我正在使用 Google colab。我想将 .pt 模型从我的谷歌驱动器转换为 .h5 模型。我按照链接https://github.com/gmalivenko/pytorch2kerashttps://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

【问题讨论】:

    标签: python machine-learning keras pytorch


    【解决方案1】:

    似乎您一开始还没有导入 pytorch_to_keras 方法。此外,作为第一个参数,您可能需要提供实际模型,而不是模型路径。试一试,我不熟悉这个库。

    【讨论】:

    • 感谢您的回答。但是我已经安装了 %pip install pytorch2keras 并且它包含 pytorch_to_keras 函数。关于模型路径,我是从我的谷歌驱动器导入的,所以我只需要给出路径。
    • 您使用 pip install 所做的是将库添加到您的计算机中。您需要将其导入当前项目。 from pytorch2keras.converter import pytorch_to_keras 在上面加上这个,否则编译器不知道 pytorch_to_keras 是什么。
    • 谢谢。我尝试以这种方式安装,但由于 pytorch_to_keras 内部出现错误,因此无法正常工作。所以这意味着它已经执行了该函数,但报错如上。
    • 基本上,我正在尝试实施强化学习。我使用 yolov5 进行了培训,并将模型保存到我的谷歌驱动器中。现在我想实施强化学习检测物体。我按照链接实施加固:github.com/imatge-upc/detection-2016-nipsws,但是当我运行命令时!python /content/image_zooms_training.py -n 0。它给了我这样的错误:文件“h5py/h5f.pyx”,第 96 行,在 h5py 中。 h5f.open OSError: 无法打开文件(未找到文件签名)。
    • 因为我使用 pytorch 使用 yolov5 和强化网络进行训练,所以我使用该 .pt 模型再次使用强化训练。所以它不会打开 .h5 文件。因此,如果您可以帮助我提供任何链接或一些示例来实施强化学习以检测对象,那么请帮助我。
    【解决方案2】:

    啊,PyTorch转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。

    【讨论】:

    • 谢谢。我遇到了这个解决方案,但我想要 keras 模型(.h5)而不是 tensorflow(.tf)。
    • 嗯,SavedModel 更新并具有更好的兼容性 - 除非您使用 tensorflow 1,否则没有理由更喜欢 .h5 而不是 SavedModel。
    猜你喜欢
    • 2019-08-04
    • 2020-10-10
    • 1970-01-01
    • 2021-12-09
    • 2019-06-10
    • 1970-01-01
    • 2020-11-17
    • 2020-09-10
    • 2021-09-01
    相关资源
    最近更新 更多