是什么原因导致Keras中的'Less'没有OpKernel?如何将其删除以进行推理?

时间:2016-10-19 00:31:25

标签: tensorflow keras

我有一个使用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)]]

Heres是我如何定义模型

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)

如何删除“减少”操作?

1 个答案:

答案 0 :(得分:0)

这是由移动TensorFlow中的操作注册错误引起的。详情:https://github.com/tensorflow/tensorflow/issues/4863

基本上,某些运营商(包括LessAdd)应在移动平台中注册DT_FLOAT32DT_INT32,但由于该错误,它们实际上只在{{{}注册1}}。

我不确定这个bug何时推出。也许它是在您使用的最后一个工作版本之后引入的。旧版本的Keras也可能使用float DT_FLOAT32 op。

无论如何都找到了根本原因。希望它能在下一个版本中尽快解决。在优雅的修复之前,您可以尝试在问题中发布的一些解决方法。您需要重新编译TensorFlow库,只需更改一些代码,就像他们在Less here中所做的那样:

Mul