OpenVINO开发小组
直播中

王辉

8年用户 1375经验值
私信 关注
[问答]

转换Keras H5模型,为什么无法确定--input_shape参数的值?


  • 使用以下命令转换 Keras H5 模型: mo --saved_model_dir model/
  • 遇到以下错误: [ ERROR ] Shape [-1 30 30 3] is not fully defined for output 0 of "conv2d_input".
    Use --input_shape with positive integers to override model input shapes.
  • 无法确定 --input_shape 参数的值。

回帖(2)

金晖

2025-3-5 14:31:37
  对于 TensorFlow* 型号,输入形状值的顺序为 [N、H、W、C]。每个字母的含义如下:

意义
N批处理中的图像数量
H图像的高度
W图像的宽度
C图像通道数(例如:3 个,RGB 1 个,灰度...)

使用以下命令转换 Keras H5 模型:
python3 mo --saved_model_dir --input_shape [1,30,30,3]
举报

遇鱼余的小白

2025-3-5 16:51:13

在转换 Keras H5 模型时,遇到 Shape [-1 30 30 3] is not fully defined for output 0 of "conv2d_input" 错误,通常是因为模型的输入形状没有完全定义。Keras 模型在保存时,有时会使用 None-1 来表示动态的批量大小(batch size),这会导致 OpenVINO 的模型优化器(Model Optimizer, mo)无法确定输入形状。


解决方法




  1. 明确指定 --input_shape 参数
    你需要为模型优化器提供明确的输入形状。--input_shape 参数应该是一个包含正整数的列表,表示输入张量的形状。例如,如果你的模型输入是一个 30x30 的 RGB 图像,并且你希望批量大小为 1,你可以使用以下命令:


    mo --saved_model_dir model/ --input_shape [1,30,30,3]

    这里的 [1,30,30,3] 表示批量大小为 1,图像高度为 30,宽度为 30,通道数为 3(RGB)。




  2. 检查模型输入形状
    在 Keras 中,你可以通过以下代码检查模型的输入形状:


    model = keras.models.load_model('model.h5')
    print(model.input_shape)

    这将输出模型的输入形状,帮助你确定正确的 --input_shape 参数值。




  3. 修改模型输入形状
    如果你希望在保存模型时明确指定输入形状,可以在 Keras 中定义模型时使用 Input 层来指定输入形状。例如:


    from tensorflow.keras.layers import Input

    input_layer = Input(shape=(30, 30, 3))
    # 接着定义其他层
    model = keras.models.Model(inputs=input_layer, outputs=...)

    这样,在保存模型时,输入形状就会被明确指定。




  4. 使用 --input 参数
    如果你只想指定输入的节点名称而不指定形状,可以使用 --input 参数。例如:


    mo --saved_model_dir model/ --input conv2d_input

    但这通常需要与 --input_shape 一起使用,以确保形状是明确的。




总结


无法确定 --input_shape 参数的值通常是因为模型的输入形状没有完全定义。通过明确指定 --input_shape 参数,或者检查并修改模型的输入形状,可以解决这个问题。确保在转换模型时提供明确的输入形状,以便模型优化器能够正确解析和转换模型。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分