【问题标题】:Weights and Bias from Trained Meta Graph来自训练元图的权重和偏差
【发布时间】:2023-04-07 16:14:02
【问题描述】:

我已成功将重新训练的 InceptionV3 NN 导出为 TensorFlow 元图。我已经成功地将这个 protobuf 读回 python,但是我很难找到一种方法来导出每个层的权重和偏差值,我假设它们存储在元图 protobuf 中,用于在 TensorFlow 之外重新创建 nn。

我的工作流程是这样的:

Retrain final layer for new categories
Export meta graph tf.train.export_meta_graph(filename='model.meta')
Build python pb2.py using Protoc and meta_graph.proto
Load Protobuf:

import meta_graph_pb2
saved = meta_graph_pb2.CollectionDef()
with open('model.meta', 'rb') as f:
  saved.ParseFromString(f.read())

从这里我可以查看图表的大部分方面,例如节点名称等,但我认为我的经验不足使得我很难找到正确的方法来访问每个相关层的权重和偏差值。

【问题讨论】:

    标签: python tensorflow protocol-buffers protoc


    【解决方案1】:

    MetaGraphDef 原型实际上并不包含权重和偏差的值。相反,它提供了一种将GraphDef 与存储在一个或多个检查点文件中的权重相关联的方法,该文件由tf.train.Saver 编写。 MetaGraphDef tutorial有更多细节,但大致结构如下:

    1. 在你的训练程序中,使用tf.train.Saver 写出一个检查点。这也会将MetaGraphDef 写入同一目录中的.meta 文件。

      saver = tf.train.Saver(...)
      # ...
      saver.save(sess, "model")
      

      您应该在检查点目录中找到名为 model.metamodel-NNNN 的文件(对于某个整数 NNNN)。

    2. 在另一个程序中,您可以导入刚刚创建的MetaGraphDef,然后从检查点恢复。

      saver = tf.train.import_meta_graph("model.meta")
      saver.restore("model-NNNN")  # Or whatever checkpoint filename was written.
      

      如果要获取每个变量的值,可以(例如)在tf.all_variables() 集合中找到变量并将其传递给sess.run() 以获取其值。例如,要打印所有变量的值,您可以执行以下操作:

      for var in tf.all_variables():
        print var.name, sess.run(var)
      

      您还可以过滤 tf.all_variables() 以查找您尝试从模型中提取的特定权重和偏差。

    【讨论】:

    • 谢谢,这是一个巨大的帮助。我正在尝试重新创建一个训练有素的网络并像这个新的iOS example 一样部署它。鉴于您的专业知识,这是建立网络参数的正确方法(每个层的权重和偏差的二进制 .dat 文件作为浮点数组)?最终目标将是一个经过 TensorFlow 训练的网络,在 Metal 上进行推理。
    • 嗯,这取决于网络的复杂程度。您也许可以直接进入检查点(例如使用tf.train.NewCheckpointReader())并从检查点文件中读取 NumPy 数组,绕过MetaGraphDef。事实上,你甚至可以在你的 iOS 程序中使用 CheckpointReader 的 C++ 实现,如果你能够链接它(虽然我不确定链接会有多困难)。
    • tf.train.NewCheckpointReader() 是一个很棒的 AP​​I。我加载了一个 inception_v3 检查点,希望重新创建存储在上述 dat 文件中的数组。对于他们如何生成网络参数,我有一个脱节。它们加载 190 个文件(每个节点 1 个偏差,1 个权重文件)作为网络参数,但 TF 为初始模型存储了超过 1200 个变量。有什么可以弥补差距的指针吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 2020-05-26
    • 1970-01-01
    • 2021-07-28
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多