【问题标题】:Saving Tensorflow Graph and Variables while excluding Adam Optimizer Variables保存 TensorFlow 图形和变量,同时排除 Adam 优化器变量
【发布时间】:2018-05-16 02:44:07
【问题描述】:

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

 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

还有两个相同的亚当副本:

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 优化器变量。

关于如何最轻松地将这些写入保存文件的任何建议?

感谢任何其他关于减少保存文件大小同时仍然能够运行分类的建议。

【问题讨论】:

    标签: tensorflow model save adam


    【解决方案1】:

    您可以指定保存器中的变量:

    saver = tf.train.Saver(...variables...) saver.save(sess, 'my-model', global_step=step)

    参考:https://www.tensorflow.org/api_docs/python/tf/train/Saver

    【讨论】:

      【解决方案2】:

      我最终使用以下代码使事情正常进行。

      我像这样保存了图表、权重、偏差等:

        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')
      

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

      并恢复为这样的分类:

       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 ...
      

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-10-02
          • 1970-01-01
          • 2016-02-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多