如何计算tensorflow模型中可训练参数的总数,该模型使用从.pb文件加载的图形进行定义?

如何计算tensorflow模型中可训练参数的总数,该模型使用从.pb文件加载的图形进行定义?,tensorflow,neural-network,convolutional-neural-network,Tensorflow,Neural Network,Convolutional Neural Network,我想计算tensorflow模型中的参数。这与现有问题类似,如下所示 但是,如果使用从.pb文件加载的图形定义模型,则所有建议的答案都不起作用。基本上,我用以下函数加载了图形 def load_graph(model_file): graph = tf.Graph() graph_def = tf.GraphDef() with open(model_file, "rb") as f: graph_def.ParseFromString(f.read()) wit

我想计算tensorflow模型中的参数。这与现有问题类似,如下所示

但是,如果使用从.pb文件加载的图形定义模型,则所有建议的答案都不起作用。基本上,我用以下函数加载了图形

def load_graph(model_file):

  graph = tf.Graph()
  graph_def = tf.GraphDef()

  with open(model_file, "rb") as f:
    graph_def.ParseFromString(f.read())

  with graph.as_default():
    tf.import_graph_def(graph_def)

  return graph
一个示例是加载冻结的_graph.pb文件,以便在tensorflow-for-poets-2中进行再培训


据我理解,
GraphDef
没有足够的信息来描述
变量。如前所述,您需要
元图
,它既包含
GraphDef
又包含
CollectionDef
,这是一个可以描述
变量的映射。因此,下面的代码应该为我们提供正确的可训练变量计数

导出元图:

import tensorflow as tf

a = tf.get_variable('a', shape=[1])
b = tf.get_variable('b', shape=[1], trainable=False)
init = tf.global_variables_initializer()
saver = tf.train.Saver([a])

with tf.Session() as sess:
    sess.run(init)
    saver.save(sess, r'.\test')
导入元图并计算可训练参数的总数

import tensorflow as tf

saver = tf.train.import_meta_graph('test.meta')

with tf.Session() as sess:
    saver.restore(sess, 'test')

total_parameters = 0
for variable in tf.trainable_variables():
    total_parameters += 1
print(total_parameters)

我真的不明白另一个问题的答案怎么不起作用。一旦你有了这个图,你只需要获取这个特定图的可训练变量。调用该函数后,您尝试了什么?您能提供一个复制问题的示例.pbtxt文件吗?这是否意味着.pb文件不包含任何可训练的_变量?非常感谢。@Yanjun我想节点都在。但你无法分辨哪一个是可训练的变量。或者加载后它们不在
tf.trainable_variables()
中。