You need to enable JavaScript to run this app. 如何让TensorFlow Lite转换模型后输出标准LSTM层而非单向序列LSTM
优惠活动
大模型
产品
解决方案
定价
更多

如何让TensorFlow Lite转换模型后输出标准LSTM层而非单向序列LSTM

问题原因

TFLite的新转换器默认会将Keras原生LSTM层自动融合为优化后的单向序列LSTM(UNIDIRECTIONNAL_SEQUENCE_LSTM)算子,用于提升端侧推理性能。如果需要保留标准LSTM算子结构,可通过以下两种方案解决:

方案1:禁用LSTM算子融合(优先使用)

该方案生成的模型仅依赖TFLite内置算子,无需额外依赖,体积小推理速度快。修改转换代码如下:

converter = tf.lite.TFLiteConverter.from_saved_model("mnist_lstm_model")
converter.experimental_new_converter = True
# 新增配置,禁用LSTM算子融合逻辑
converter.experimental_disable_lstm_fusion = True
tflite_model = converter.convert()

# 保存转换后的模型
with open("mnist_lstm_std.tflite", "wb") as f:
    f.write(tflite_model)

注意:该参数在TensorFlow 2.4及以上版本生效,如果你的TF版本低于2.4建议先升级到稳定新版本。

方案2:使用TF Select算子保留原生LSTM结构

如果方案1无法满足需求(比如需要完全对齐训练时的LSTM逻辑),可以通过支持TensorFlow原生算子的方式转换,修改代码如下:

converter = tf.lite.TFLiteConverter.from_saved_model("mnist_lstm_model")
converter.experimental_new_converter = True
# 配置同时支持TFLite内置算子和TensorFlow原生算子
converter.target_spec.supported_ops = [
    tf.lite.OpsSet.TFLITE_BUILTINS,
    tf.lite.OpsSet.SELECT_TF_OPS
]
# 关闭张量列表降级逻辑,避免LSTM被拆分融合
converter._experimental_lower_tensor_list_ops = False
tflite_model = converter.convert()

# 保存转换后的模型
with open("mnist_lstm_original.tflite", "wb") as f:
    f.write(tflite_model)

注意:该方案生成的模型需要部署环境支持TF Select算子库,整体体积会比方案1的模型更大。

内容的提问来源于stack exchange,提问作者Lucas Kassianow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 07:06:04