将训练好的模型参数保存起来,以便以后进行验证或测试,这是我们经常要做的事情.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学习之模型的保存与恢复(保护)