0

我们使用 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 代码吗?
4

0 回答 0