我在Keras到ONNX的转换中观察到尺寸不匹配。我将模型保存为.h5文件。它可以成功保存并再次加载。但是,当将其转换为ONNX模型时,我得到了不同的输出尺寸。
我想我是因为2D输出而遇到这种情况的,因为我的一个输出维度完全消失了。
正在加载Keras模型...
>>> keras_model = load_model('model_checkpoints/DGCNN_modelbest_with_noise.h5')
>>> keras_output = keras_model.output
>>> keras_output
<tf.Tensor 'dense_2/truediv_5:0' shape=(None, 432, 5) dtype=float32>
正在将Keras模型转换为ONNX...
>>> input_keras_model = 'model_checkpoints/DGCNN_modelbest_with_noise.h5'
>>> output_onnx_model = 'model_checkpoints/DGCNN_modelbest_with_noise.onnx'
>>> keras_model = load_model(input_keras_model)
>>> onnx_model = onnxmltools.convert_keras(keras_model)
>>> onnxmltools.utils.save_model(onnx_model, output_onnx_model)
正在加载ONNX模型...
>>> model = onnx.load("model_checkpoints/DGCNN_modelbest_with_noise.onnx")
>>> for _output in model.graph.output:
... m_dict = MessageToDict(_output)
... dim_info = m_dict.get("type").get("tensorType").get("shape").get("dim")
... output_shape = [d.get("dimValue") for d in dim_info]
... print(m_dict["name"])
... print(output_shape)
...
dense_2
[None, None, '5']
有什么建议吗?我做错了什么?我没有看到很多多维输出层的示例。这是原因吗?
感谢您抽出宝贵时间。
1条答案
按热度按时间lc8prwob1#
我没有问题以下的例子,我尝试通过加载和运行它仍然有相同的结果,但我使用的pdb格式。pdb格式是一个分子格式,其中包括缝合和使用从model.save(...)
名称具体且类型重要
第一个
更改形状和类型以匹配模型