2

目前,我正在尝试将一个导入Keras,以便在大小为1x1x200x200ONNX model的灰度图像数据集上运行训练。

但是,当我使用将我的 onnx 模型转换为 Keras 时

onnx-to-keras()

模型的输入层更改为?x1x200x200作为.h5 model.

当转换回 .onnx 文件时,输入层已更改为 Nx1x200x200。

这在尝试训练模型时有效,但在使用 ONNX 运行时将训练的神经网络部署到 C Plus Plus 代码时,更改的输入层会导致错误。

这是因为N被读取为导致溢出的 -1 维层。

C++ 代码适用于原始模型,其中输入层预计将接收 1x1x200x200 图像

我已经尝试在 numpy 数组张量上使用 reshape() 更改张量输入,但这对更改后的模型没有影响。

只是想知道这是否可以修复,任何帮助将不胜感激。谢谢!

4

1 回答 1

0

回答我自己的问题,

从 ONNX 到 Keras 的转换器目前不是 1-1。因此,为了实现完整性,keras 转换器似乎会根据输入更改 ONNX 模型以接收任意输入值(N 维)。为了解决这个问题,我只需要训练网络、编辑输入和输出层,然后重新导出模型以使 C Plus Plus 代码正常工作。

k_model.summary()
k_model._layers.pop(-1)
k_model._layers.pop(-1)
k_model.summary()

newInput = Input(batch_shape=(1,1,200,200))
newOutputs = k_model(newInput)
newModel = Model(newInput,newOutputs)
newModel.summary()

我目前正在尝试弄清楚这是否会保留原始模型的权重。但到目前为止,“新模型”中似乎已经存在权重,这是一个好兆头。

于 2020-06-28T19:56:24.947 回答