代码之家  ›  专栏  ›  技术社区  ›  mrgloom

加载的.pb文件的tf.get\集合(tf.GraphKeys.GLOBAL\变量)是empy

  •  1
  • mrgloom  · 技术社区  · 7 年前

    .pb 文件,但由于某种原因它是空的。

    import tensorflow as tf
    
    tf_model_path = './tf_coreml_ssd_resources/ssd_mobilenet_v1_android_export.pb'
    
    with open(tf_model_path, 'rb') as f:
        serialized = f.read()
    
    tf.reset_default_graph()
    
    original_gdef = tf.GraphDef()
    original_gdef.ParseFromString(serialized)
    
    # V1
    with tf.Graph().as_default() as g:
        print('type(g)', type(g)) # type(g) <class 'tensorflow.python.framework.ops.Graph'>
    
        tf.import_graph_def(original_gdef, name='')
    
        model_vars = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES)
        print('type(model_vars)', type(model_vars))
        print('model_vars', model_vars)
    
    # V2
    graph = tf.import_graph_def(original_gdef, name='')
    
    print('type(graph)', type(graph)) # why type(graph) <class 'NoneType'> ?
    
    model_vars = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES)
    print('type(model_vars)', type(model_vars))
    print('model_vars', model_vars)
    

    还有为什么万一我 type(graph) <class 'NoneType'>

    1 回复  |  直到 7 年前
        1
  •  1
  •   javidcf    7 年前

    这个 GraphDef 对象序列化到 .pb 文件不包含集合信息。如果要存储图形及其元数据(包括集合),则应保存 MetaGraphDef tf.train.export_meta_graph / tf.train.import_meta_graph ).

    在你的 V2 graph None 因为 tf.import_graph_def 不返回任何内容,它只是将给定图形定义中的节点导入到当前默认图形中。

    作为旁白,请注意 graph collections are being deprecated in TensorFlow 2.x

    推荐文章