是什么导致 Keras 中没有 OpKernel 'Less',我如何删除它以进行推理?



我用Keras框架创建了一个模型。我能够将模型部署到iOS设备上并成功地进行推理。然而,在我更新Keras(1.1.0)和Tensorflow(0.11.0)并重新训练我的模型之后,当我试图在设备上运行新模型时,我收到了以下错误。

Running model failed: Invalid argument: No OpKernel was registered to support Op 'Less' with these attrs
     [[Node: while/Less = Less[T=DT_INT32](while/Merge, while/Less/Enter)]]
下面是我如何定义模型的
inputs = Input(shape=(look_back, feature_count))
encoded = LSTM(50, return_sequences=True)(inputs)
encoded = LSTM(25, return_sequences=True)(encoded)
encoded = LSTM(10)(encoded)
decoded = RepeatVector(look_back)(encoded)
decoded = LSTM(feature_count, return_sequences=True)(decoded)
sequence_autoencoder = Model(input=inputs, output=decoded)
sequence_autoencoder.compile(optimizer='RMSprop', loss='mse')
sequence_autoencoder.fit(X_train, X_train,
                          nb_epoch = epochs,
                          batch_size = 32,
                          verbose=1)

如何删除'Less' op?

这是由移动TensorFlow中的op注册错误引起的。详细信息:https://github.com/tensorflow/tensorflow/issues/4863

在移动平台上,包括LessAdd在内的一些运营商基本上应该注册DT_FLOAT32DT_INT32,但由于漏洞,他们实际上只注册了DT_FLOAT32

我不确定这个bug是什么时候引入的。也许它是在您使用的最后一个工作版本之后引入的。也有可能旧版本的Keras使用浮点数Less op.

无论如何,根本原因已经找到了。希望下个版本能尽快解决。在优雅的修复之前,您可以尝试在问题中发布的一些解决方案。你必须重新编译TensorFlow库,并进行一些代码更改,就像他们在Mul中所做的那样:

#if defined(__ANDROID_TYPES_SLIM__)
// We only register the first type when we have multi-argument calls in the
// case where we're trying to reduce executable size, but it turns out that the
// int32 version of this op is needed, so explicitly include it.
REGISTER(BinaryOp, CPU, "Mul", functor::mul, int32);
#endif  // __ANDROID_TYPES_SLIM__

相关内容

  • 没有找到相关文章

最新更新