Tensorflow学习(6)模型的保存与恢复(saver)
来源:互联网 发布:桌游手机软件 编辑:程序博客网 时间:2024/05/07 23:02
将训练好的模型参数保存起来,以便以后进行验证或测试。tf里面提供模型保存的是tf.train.Saver()模块。
保存模型,首先要建立一个Saver对象:如
saver=tf.train.Saver()
在创建这个对象的时候,有一个参数max_to_keep经常会用到,用来设置保存模型的个数,默认是5。即max_to_keep=5,保存最近的5个模型。如果你想每训练一代(epoch)就想保存一次模型,则可以将 max_to_keep设置为None或者0,如:
saver=tf.train.Saver(max_to_keep=0)
但是这样做除了多占用硬盘,并没有实际多大的用处,因此不推荐。
当然,如果你只想保存最后一代的模型,则只需要将max_to_keep设置为1即可。
创建完saver对象后,就可以保存训练好的模型了,如:
saver.save(sess,'ckpt/mnist.ckpt',global_step=step)
第二个参数设置保存的路径和名字,第三个参数将训练的次数作为后缀加入到模型名字中。
在实验中,最后一代可能并不是验证精度最高的一代,因此我们并不想默认保存最后一代,而是想保存验证精度最高的一代,则加个中间变量和判断语句就可以了。
saver=tf.train.Saver(max_to_keep=1)max_acc=0for i in range(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([loss,acc],feed_dict={x:mnist.test.images,y_:mnist.test.labels}) print('epoch:%d, val_loss:%f,val_acc:%f'%(i,val_loss,val_acc)) if val_acc>max_acc: max_acc=val_acc saver.save(sess,'ckpt/mnist.ckpt',global_step=i+1)sess.close()
如果我们想保存验证精度最高的三代,且把每次的验证精度也随之保存下来,则我们可以生成一个txt文件用于保存。
saver=tf.train.Saver(max_to_keep=3)max_acc=0f=open('ckpt/acc.txt','w')for i in range(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([loss,acc], feed_dict={x: mnist.test.images, y_: mnist.test.labels}) print('epoch:%d, val_loss:%f, val_acc:%f'%(i,val_loss,val_acc)) f.write(str(i+1)+', val_acc: '+str(val_acc)+'\n') if val_acc>max_acc: max_acc=val_acc saver.save(sess,'ckpt/mnist.ckpt',global_step=i+1)f.close()sess.close()
模型的恢复用的是restore()函数,它需要两个参数restore(sess, save_path),save_path指的是保存的模型路径。我们可以使用tf.train.latest_checkpoint()来自动获取最后一次保存的模型。如:
model_file=tf.train.latest_checkpoint('ckpt/')saver.restore(sess,model_file)
则程序后半段代码我们可以改为:
sess=tf.InteractiveSession() sess.run(tf.global_variables_initializer())is_train=Falsesaver=tf.train.Saver(max_to_keep=3)#训练阶段if is_train: max_acc=0 f=open('ckpt/acc.txt','w') for i in range(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([loss,acc], feed_dict={x: mnist.test.images, y_: mnist.test.labels}) print('epoch:%d, val_loss:%f, val_acc:%f'%(i,val_loss,val_acc)) f.write(str(i+1)+', val_acc: '+str(val_acc)+'\n') if val_acc>max_acc: max_acc=val_acc saver.save(sess,'ckpt/mnist.ckpt',global_step=i+1) f.close()#验证阶段else: model_file=tf.train.latest_checkpoint('ckpt/') saver.restore(sess,model_file) val_loss,val_acc=sess.run([loss,acc], feed_dict={x: mnist.test.images, y_: mnist.test.labels}) print('val_loss:%f, val_acc:%f'%(val_loss,val_acc))sess.close()
整个源程序
# -*- coding: utf-8 -*-"""Created on Sun Jun 4 10:29:48 2017@author: Administrator"""import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets("MNIST_data/", one_hot=False)x = tf.placeholder(tf.float32, [None, 784])y_=tf.placeholder(tf.int32,[None,])dense1 = tf.layers.dense(inputs=x, units=1024, activation=tf.nn.relu, kernel_initializer=tf.truncated_normal_initializer(stddev=0.01), kernel_regularizer=tf.nn.l2_loss)dense2= tf.layers.dense(inputs=dense1, units=512, activation=tf.nn.relu, kernel_initializer=tf.truncated_normal_initializer(stddev=0.01), kernel_regularizer=tf.nn.l2_loss)logits= tf.layers.dense(inputs=dense2, units=10, activation=None, kernel_initializer=tf.truncated_normal_initializer(stddev=0.01), kernel_regularizer=tf.nn.l2_loss)loss=tf.losses.sparse_softmax_cross_entropy(labels=y_,logits=logits)train_op=tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss)correct_prediction = tf.equal(tf.cast(tf.argmax(logits,1),tf.int32), y_) acc= tf.reduce_mean(tf.cast(correct_prediction, tf.float32))sess=tf.InteractiveSession() sess.run(tf.global_variables_initializer())is_train=Truesaver=tf.train.Saver(max_to_keep=3)#训练阶段if is_train: max_acc=0 f=open('ckpt/acc.txt','w') for i in range(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([loss,acc], feed_dict={x: mnist.test.images, y_: mnist.test.labels}) print('epoch:%d, val_loss:%f, val_acc:%f'%(i,val_loss,val_acc)) f.write(str(i+1)+', val_acc: '+str(val_acc)+'\n') if val_acc>max_acc: max_acc=val_acc saver.save(sess,'ckpt/mnist.ckpt',global_step=i+1) f.close()#验证阶段else: model_file=tf.train.latest_checkpoint('ckpt/') saver.restore(sess,model_file) val_loss,val_acc=sess.run([loss,acc], feed_dict={x: mnist.test.images, y_: mnist.test.labels}) print('val_loss:%f, val_acc:%f'%(val_loss,val_acc))sess.close()
阅读全文
0 0
- Tensorflow学习(6)模型的保存与恢复(saver)
- tensorflow 模型的保存与恢复(Saver)
- tensorflow 1.0 学习:模型的保存与恢复(Saver)
- tensorflow学习笔记(三十四):Saver(保存与加载模型)
- TensorFlow入门(九)使用 tf.train.Saver()保存模型
- TensorFlow入门(九)使用 tf.train.Saver()保存模型
- tensorflow学习(4):保存模型Saver.save()的参数命名机制以及restore并创建手写字体识别引擎
- tensorflow训练模型保存saver和恢复restore
- 【深度学习】Tensorflow模型保存与恢复
- Tensorflow的模型保存和读取tf.train.Saver
- tensorflow saver 保存和恢复指定 tensor
- Tensorflow小样例-Saver模型保存读取
- 机器学习-训练模型的保存与恢复(sklearn)
- 机器学习-训练模型的保存与恢复(sklearn)
- tensorflow学习day2简单监督学习模型及用tf.train.Saver实现检查点恢复
- 16、TensorFLow 模型参数的保存与恢复
- tensorflow学习笔记(八):模型持久化 saver and restore
- Saver类--变量的保存和恢复
- Lightoj1156【二分+贪心】
- 配置keepalived ping不通 解决办法
- Eslint 配置及规则说明
- 对卡尔曼滤波的理解
- SQL
- Tensorflow学习(6)模型的保存与恢复(saver)
- SEO小结
- 高亮
- 测试点总结。。。
- Android验证手机号码的
- JavaScript jQuery 中定义数组与操作及jquery数组操作
- 使用CrashHandler获取应用的crash信息
- jsp页面集成xhEditor文本编辑器
- 两张表SQL关联查询