.pb 文件到 tflite 转换时无法解析文件错误

问题描述 投票:0回答:1

嗨,我正在使用 tf1.15 中的 pb 文件为自定义 albert 模型制作 tflite,但出现了错误

raise IOError("Cannot parse file %s: %s." % (path_to_pb, str(e)))
OSError: Cannot parse file b'/home/choss/test2/freeze2/saved_model.pb': Error parsing message.

下面的代码是我如何制作.pb文件

meta_path = 'model.ckpt-400.meta'  # Your .meta file
output_node_names = ['loss/Softmax']    

with tf.Session() as sess:

    # Restore the graph
    saver = tf.train.import_meta_graph(meta_path)

    # Load weights
    ckpt ='/home/choss/test2/freeze2/model.ckpt-400'
    print(ckpt) 
    saver.restore(sess, ckpt)

    output_node_names = [n.name for n in tf.get_default_graph().as_graph_def().node]

    # Freeze the graph
    frozen_graph_def = tf.graph_util.convert_variables_to_constants(
        sess,
        sess.graph_def,
        output_node_names)

    # Save the frozen graph
    with open('saved_model.pb', 'wb') as f:
        f.write(frozen_graph_def.SerializeToString())

我尝试使用下面的代码制作 tflite 文件

saved_model_dir = "/home/choss/test2/freeze2"
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

我使用 f.graph_util.convert_variables_to_constants 因为 freeze_graph 因为

freeze_graph.freeze_graph('./graph.pbtxt', saver, False, 'model.ckpt-400', 'loss/ArgMax', "", "", 'frozen.pb', True, "")

给我一条错误消息

File "/home/pgb/anaconda3/envs/myenv/lib/python3.7/site-packages/tensorflow_core/python/framework/ops.py", line 2154, in __getitem__
    return self._inputs[i]
IndexError: list index out of range

是因为我没有使用freeze_graph吗? 如果是的话除了 freeze_graph 还有其他方法吗?

tensorflow tensorflow-lite bert-language-model
1个回答
0
投票

我建议不要自己冻结图表,而是导出为 TF 保存的模型,并将保存的模型转换器与最新的 TF 版本一起使用。您可以解耦 TensorFlow 版本以进行训练和转换。例如,可以在 TF 1.15 中进行训练,并可以从中导出保存的模型。然后,可以将保存的模型引入 TensorFlow 2.4.1 版本或更高版本中的 TFLite 转换器 API。

© www.soinside.com 2019 - 2024. All rights reserved.