Python TensorFlow:Saver有5个型号限制

Python TensorFlow:Saver有5个型号限制,python,machine-learning,tensorflow,Python,Machine Learning,Tensorflow,我想为我的实验保存多个模型,但我注意到tf.train.Saver()constructor不能保存超过5个模型。下面是一个简单的代码: 将tensorflow导入为tf x=tf.变量(tf.零([1])) saver=tf.train.saver() sess=tf.Session() 对于范围(10)内的i: sess.run(tf.initialize\u all\u variables()) saver.save(sess,“/home/eneskobey/Desktop/model”

我想为我的实验保存多个模型,但我注意到
tf.train.Saver()
constructor不能保存超过5个模型。下面是一个简单的代码:

将tensorflow导入为tf
x=tf.变量(tf.零([1]))
saver=tf.train.saver()
sess=tf.Session()
对于范围(10)内的i:
sess.run(tf.initialize\u all\u variables())
saver.save(sess,“/home/eneskobey/Desktop/model”+str(i))
当我运行这段代码时,我在桌面上只看到5个模型。为什么会这样?如何使用相同的
tf.train.Saver()
构造函数保存5个以上的模型?

使用名为
max\u to\u keep
的可选参数,默认情况下保留模型的5个最新检查点。要保存更多模型,只需为该参数指定一个值:

import tensorflow as tf 

x = tf.Variable(tf.zeros([1]))
saver = tf.train.Saver(max_to_keep=10)
sess = tf.Session()

for i in range(10):
  sess.run(tf.initialize_all_variables())
  saver.save(sess, '/home/eneskocabey/Desktop/model' + str(i))
要保留所有检查点,请将参数
max\u To\u keep=None
传递给saver构造函数

  • 如果您使用自己的
    tf.Session()
    进行培训:
  • 为了保留中间检查点而不是最后5个检查点,您需要在中更改2个参数:

    • max_to_keep
      -表示要保留的最近检查点文件的最大数量。创建新文件时,会删除旧文件。如果无或0,则不会从文件系统中删除任何检查点,但检查点文件中只保留最后一个检查点。默认值为5(即保留最近的5个检查点文件。)
    • 每\u n \u小时保留一个检查点\u
      -除了保留最新的max\u to \u keep checkpoint文件外,您可能还需要为每n小时的培训保留一个检查点文件。如果您希望以后分析模型在长时间的培训课程中的进展情况,这将非常有用。例如,通过keep_checkpoint_every_n_hours=2可确保每2小时的培训保留一个检查点文件。默认值10000小时将有效禁用该功能
    因此,如果执行以下操作,则每2小时存储一个检查点,如果保存的检查点总数达到10个,则将删除最旧的检查点,并替换一个新的检查点:

    saver = tf.train.Saver(max_to_keep=10, keep_checkpoint_every_n_hours=2)
    
    run_config = tf.estimator.RunConfig()
    run_config = run_config.replace(keep_checkpoint_max=10, 
        save_checkpoints_steps=100)
    classifier = tf.estimator.Estimator(
        model_fn=model_fn, model_dir=model_dir, config=run_config)
    
  • 如果使用
    tf.estimator.estimator()
    ,则检查点的保存由估计器本身完成。这就是为什么需要使用以下一些参数传递它:

    • keep\u checkpoint\u max
      -要保留的最近检查点文件的最大数量。创建新文件时,会删除旧文件。如果无或0,则保留所有检查点文件。默认值为5(即保留最近的5个检查点文件。)
    • 保存检查点\u步骤
      -每隔这么多步骤保存检查点。无法使用
      保存检查点\u秒
      指定
    • save_checkpoints_secs
      -每隔这么多秒保存一次检查点。无法使用
      保存检查点\u步骤指定。如果构造函数中未设置
      save\u checkpoints\u步骤
      save\u checkpoints\u secs
      ,则默认为600秒。如果
      save_checkpoints_步骤
      save_checkpoints_secs
      均为无,则禁用检查点
  • 因此,如果您执行以下操作,您将每100次迭代存储一个检查点,如果保存的检查点总数达到10个,则将删除最旧的检查点,并替换一个新的检查点:

    saver = tf.train.Saver(max_to_keep=10, keep_checkpoint_every_n_hours=2)
    
    run_config = tf.estimator.RunConfig()
    run_config = run_config.replace(keep_checkpoint_max=10, 
        save_checkpoints_steps=100)
    classifier = tf.estimator.Estimator(
        model_fn=model_fn, model_dir=model_dir, config=run_config)
    

    “无”设置很有用,但在文档中不可用,整洁!(使用安全吗?@VF1我认为只要你有存储空间来保存所有检查点,它应该是安全的。我发现,对于具有50mil可训练变量的模型,10个检查点占用约4GB的空间。