tensorflow1.0学习之模型的保存与恢复(保护)

  

将训练好的模型参数保存起来,以便以后进行验证或测试,这是我们经常要做的事情.tf里面提供模型保存的是tf.train.Saver()模块。

  

模型保存,先要创建一个储蓄者对象:如

        储蓄者=tf.train.Saver ()      

在创建这个储蓄者对象的时候,有一个参数我们经常会用的到,就是max_to_keep参数,这个是用来设置保存模型的个数,默认为5,即max_to_keep=5,保存最近的5个模型。如果你想每训练一代(时代)就想保存一次模型,则可以将max_to_keep设置为没有或者0,如:

        储蓄者=tf.train.Saver (max_to_keep=0)      

但是这样做除了多占用硬盘,并没有实际多大的用处,因此不推荐。

  

当然,如果你只想保存最后一代的模型,则只需要将max_to_keep设置为1,即可,即

        储蓄者=tf.train.Saver (max_to_keep=1)      

创建完储蓄者对象后,就可以保存训练好的模型了,如:

        saver.save(税,ckpt/mnist.ckpt, global_step=一步)      

第一个参数捐,这个就不用说了。第二个参数设定保存的路径和名字,第三个参数将训练的次数作为后缀加入到模型名字中。

  

储蓄者。保存(税,我的模型,global_step=0)==在,,,,,文件名:“my-model-0”
  ,……
  储蓄者。保存(税,我的模型,global_step=1000)==比;文件名:“我-模型- 1000”

  

看一个mnist实例:

        # - * -编码:utf - 8 - *   ”“”   创建>   储蓄者=tf.train.Saver (max_to_keep=1)   max_acc=0   因为我在范围(100):   batch_xs batch_ys=mnist.train.next_batch (100)   sess.run (train_op feed_dict={x: batch_xs y_: batch_ys})   val_loss val_acc=sess.run(损失,acc, feed_dict={x: mnist.test。图片、y_: mnist.test.labels})   打印(“时代:% d val_loss: % f, val_acc: % f ' %(我val_loss val_acc))   如果val_acc> max_acc:   max_acc=val_acc   saver.save(税,ckpt/mnist.ckpt, global_step=i + 1)   sess.close ()      之前      

如果我们想保存验证精度最高的三代,且把每次的验证精度也随之保存下来,则我们可以生成一个txt文件用于保存。

        储蓄者=tf.train.Saver (max_to_keep=3)   max_acc=0   开放(f=' ckpt/acc.txt ', ' w ')   因为我在范围(100):   batch_xs batch_ys=mnist.train.next_batch (100)   sess.run (train_op feed_dict={x: batch_xs y_: batch_ys})   val_loss val_acc=sess.run(损失,acc, feed_dict={x: mnist.test。图片、y_: mnist.test.labels})   打印(“时代:% d val_loss: % f, val_acc: % f ' %(我val_loss val_acc))   f.write (str (i + 1) + ' val_acc:“+ str (val_acc) + ' \ n ')   如果val_acc> max_acc:   max_acc=val_acc   saver.save(税,ckpt/mnist.ckpt, global_step=i + 1)   f.close ()   sess.close ()      之前      

模型的恢复用的是恢复()函数,它需要两个参数恢复(税,save_path) save_path指的是保存的模型路径。我们可以使用tf.train.latest_checkpoint()来自动获取最后一次保存的模型。如:

        model_file=tf.train.latest_checkpoint (ckpt/)   model_file saver.restore(税)      

则程序后半段代码我们可以改为:

        税=tf.InteractiveSession ()   sess.run (tf.global_variables_initializer ())   is_train=False   储蓄者=tf.train.Saver (max_to_keep=3)      #训练阶段   如果is_train:   max_acc=0   开放(f=' ckpt/acc.txt ', ' w ')   因为我在范围(100):   batch_xs batch_ys=mnist.train.next_batch (100)   sess.run (train_op feed_dict={x: batch_xs y_: batch_ys})   val_loss val_acc=sess.run(损失,acc, feed_dict={x: mnist.test。图片、y_: mnist.test.labels})   打印(“时代:% d val_loss: % f, val_acc: % f ' %(我val_loss val_acc))   f.write (str (i + 1) + ' val_acc:“+ str (val_acc) + ' \ n ')   如果val_acc> max_acc:   max_acc=val_acc   saver.save(税,ckpt/mnist.ckpt, global_step=i + 1)   f.close ()      #验证阶段   其他:   model_file=tf.train.latest_checkpoint (ckpt/)   model_file saver.restore(税)   val_loss val_acc=sess.run(损失,acc, feed_dict={x: mnist.test。图片、y_: mnist.test.labels})   打印(“val_loss: % f, val_acc: % f ' % (val_loss val_acc))   sess.close ()   之前      

标红的地方,就是与保存,恢复模型相关的代码。用一个bool型变量is_train来控制训练和验证两个阶段。

tensorflow1.0学习之模型的保存与恢复(保护)