我有一个使用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)
如何删除“减少”操作?
答案 0 :(得分:0)
这是由移动TensorFlow中的操作注册错误引起的。详情:https://github.com/tensorflow/tensorflow/issues/4863
基本上,某些运营商(包括Less
和Add
)应在移动平台中注册DT_FLOAT32
和DT_INT32
,但由于该错误,它们实际上只在{{{}注册1}}。
我不确定这个bug何时推出。也许它是在您使用的最后一个工作版本之后引入的。旧版本的Keras也可能使用float DT_FLOAT32
op。
无论如何都找到了根本原因。希望它能在下一个版本中尽快解决。在优雅的修复之前,您可以尝试在问题中发布的一些解决方法。您需要重新编译TensorFlow库,只需更改一些代码,就像他们在Less
here中所做的那样:
Mul