保存Tensorflow图和变量,同时排除Adam优化器变量

保存Tensorflow图和变量,同时排除Adam优化器变量,tensorflow,model,save,adam,Tensorflow,Model,Save,Adam,我正在使用以下方法保存张量流图和变量: builder = tf.saved_model.builder.SavedModelBuilder(export_dir) builder.add_meta_graph_and_variables(sess, ["nn"]) builder.save(as_text=False) 我想用最小的保存文件来运行分类。具体来说,我希望从保存文件中排除培训期间创建的Adam变量 在保存之前,当我迭代由tf.all_variables()返回的值时,我得到

我正在使用以下方法保存张量流图和变量:

 builder = tf.saved_model.builder.SavedModelBuilder(export_dir)
 builder.add_meta_graph_and_variables(sess, ["nn"])
 builder.save(as_text=False)
我想用最小的保存文件来运行分类。具体来说,我希望从保存文件中排除培训期间创建的Adam变量

在保存之前,当我迭代由
tf.all_variables()
返回的值时,我得到的变量如下:

tf.Variable 'mymodel/fully_connected/weights:0' shape=(128, 100) dtype=float32_ref
还有两份相同的Adam副本:

tf.Variable 'mymodel/train/mymodel/fully_connected/weights/Adam:0' shape=(128, 100) dtype=float32_ref

tf.Variable 'mymodel/train/mymodel/fully_connected/weights/Adam_1:0' shape=(128, 100) dtype=float32_ref
这使检查点文件的大小增加了三倍,并且我受到目标系统的约束。保存文件将只用于分类,而不用于培训,因此我不需要Adam optimizer变量

关于如何最轻松地不将这些内容写入保存文件,有什么建议吗


对于在仍然能够运行分类的情况下减少保存文件大小的任何其他建议,我们将不胜感激。

您可以在保存程序中指定变量:


saver=tf.train.saver(…变量…)
saver.save(sess,“我的模型”,全局步骤=步骤)


参考资料:

我最终使用以下代码实现了工作

我保存了图表、权重、偏差等,如下所示:

  with tf.Session(graph=tf.Graph()) as sess:
    // Checkpoint of trained model that has Adam optimizer variables
    tf.saved_model.loader.load(sess, ["audio_nn"], FLAGS.checkpoint_dir)

    # Dump out checkpoint without Adam optimizer variables
    saver = tf.train.Saver(tf.model_variables())
    saver.save(sess, 'my-model')
 with tf.Session(graph=tf.Graph()) as sess:
    imported_meta = tf.train.import_meta_graph("my-model.meta")
    imported_meta.restore(sess, "my-model")

    features_tensor = sess.graph.get_tensor_by_name( params.INPUT_TENSOR_NAME)
    prediction_tensor = sess.graph.get_tensor_by_name( 'mymodel/prediction:0')

    ... prediction code ...
幸运的是,tf.model_variables()只返回模型所需的变量,而不返回Adam优化器变量

并恢复为如下分类:

  with tf.Session(graph=tf.Graph()) as sess:
    // Checkpoint of trained model that has Adam optimizer variables
    tf.saved_model.loader.load(sess, ["audio_nn"], FLAGS.checkpoint_dir)

    # Dump out checkpoint without Adam optimizer variables
    saver = tf.train.Saver(tf.model_variables())
    saver.save(sess, 'my-model')
 with tf.Session(graph=tf.Graph()) as sess:
    imported_meta = tf.train.import_meta_graph("my-model.meta")
    imported_meta.restore(sess, "my-model")

    features_tensor = sess.graph.get_tensor_by_name( params.INPUT_TENSOR_NAME)
    prediction_tensor = sess.graph.get_tensor_by_name( 'mymodel/prediction:0')

    ... prediction code ...

检查点文件现在的大小大约是以前的三分之一。

我也遇到了同样的问题,但是我的tf.model\u variables()是空的。除了用tf.trainable_variables()替换tf.model_variables()之外,我只能使用您相同的想法保存必要的变量。这很好地排除了ADAM变量。我的模型保存代码如下所示:

saver = tf.train.Saver(tf.trainable_variables())
saver.save(session, 'model.ckpt')