我们使用 TF Lite 转换器将带有 LSTM 的模型从 KERAS 转换为 TF Lite。这毫无错误地进行。模型:
import tensorflow as tf
import weights_from_onnx as wfo
model = tf.keras.Sequential()
model.add(tf.keras.layers.LSTM(50, return_sequences=True))
model.add(tf.keras.layers.Dense(9))
model.add(tf.keras.layers.Softmax())
model.build(input_shape=[1,1,3])
model.summary()
model.layers[0].set_weights(wfo.LSTM)
model.layers[1].set_weights(wfo.LINEAR)
转换是这样的:
# Convert the model.
converter = tf.lite.TFLiteConverter.from_keras_model(Model.model)
converter.target_spec.supported_ops = [
tf.lite.OpsSet.TFLITE_BUILTINS, # enable TensorFlow Lite ops.
tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
]
tflite_model = converter.convert()
当我们构建 TF lite 代码时,甚至当我们实现 hello world 示例时,我们也可以在我们的 cortex M4 处理器上运行代码。但是,上述模型无法运行。
它卡在缺少的“WHILE”运算符上(并且也不在受支持的运算符列表中)。
我的问题:
- 为什么我的 LSTM 中有 WHILE 运算符?
- 这与模型是有状态还是无状态的问题有关吗?(我们实际上希望它是有状态的,即一次处理 1 个时间步并立即获得结果)。
- 如何查看我的 TF Lite 模型中有哪些运算符?
- 我可以实现这个 WHILE 运算符吗?要让它运行需要什么?
- 显然 TFLM 中还没有对 LSTM 的支持。在我的处理器上实现这个有什么建议?我应该自己编写 LSTM 代码吗?