【问题标题】:Incorrect input shape in coreml after converting keras model转换 keras 模型后 coreml 中的输入形状不正确
【发布时间】:2018-05-13 10:42:02
【问题描述】:

我有这样的 keras 模型:

inputlayer = Input(shape=(126,12))

model = BatchNormalization()(inputlayer)
model = Conv1D(16, 25, activation='relu')(model)
model = Flatten()(model)
model = Dense(output_size, activation='sigmoid')(model)

model = Model(inputs=inputlayer, outputs=model)

我转换成coreml:

coreml_model = coremltools.converters.keras.convert(model,
                                                    class_labels=classes)
coreml_model.save('speech_model.mlmodel')

所以,我希望看到MultiArray (Double 126x12),但我看到了MultiArray (Double 12)

你能帮我说说我做错了什么吗?

【问题讨论】:

  • 在 keras 方面,一切似乎都还不错。
  • 也许 coremltools 将 126 视为批量大小。当您转换模型没有初始BatchNormalization层时会发生什么?
  • 您解决了这个问题吗?我也有同样的问题。

标签: python ios keras coreml coremltools


【解决方案1】:

As identified by G-mel 出现这个错误的原因是输入长度为 2。CoreMLtools 然后假设您的输入形状为 [Seq, D]。您可以通过添加重塑层来解决此问题:

inputlayer = Input(shape=(126 * 12,))

model = Reshape((126,12))(inputlayer)
model = BatchNormalization()(model)
model = Conv1D(16, 25, activation='relu')(model)
model = Flatten()(model)
model = Dense(output_size, activation='sigmoid')(model)

model = Model(inputs=inputlayer, outputs=model)

然后,您的应用必须展平输入。然而,这并不理想,因为它在 GPU 上效率不高。希望问题能很快得到解决。

【讨论】:

  • 我在 coremltools 中打开了问题,他们说问题已解决,但我还没有检查它github.com/apple/coremltools/issues/70
  • @AndriiKrupka 你是对的。问题的根源不是我想的那样,所以我添加了正确的答案。希望这将很快得到解决。因为把reshape操作放到模型中并不理想。
猜你喜欢
  • 1970-01-01
  • 2019-08-30
  • 2017-12-10
  • 2020-04-28
  • 2020-09-26
  • 2020-09-04
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多