来自训练元图的权重和偏差

Vin*_*y M 4 python protocol-buffers protoc tensorflow

我已成功导出重新训练的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())
Run Code Online (Sandbox Code Playgroud)

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

mrr*_*rry 8

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

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

    saver = tf.train.Saver(...)
    # ...
    saver.save(sess, "model")
    
    Run Code Online (Sandbox Code Playgroud)

    您应该在检查点目录中找到被调用的文件model.metamodel-NNNN(对于某些整数NNNN).

  2. 在另一个程序中,您可以导入MetaGraphDef刚刚创建的程序,并从检查点还原.

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

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

    for var in tf.all_variables():
      print var.name, sess.run(var)
    
    Run Code Online (Sandbox Code Playgroud)

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