日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

tensorflow 1.0 学习:模型的保存与恢复(Saver)

發布時間:2025/3/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tensorflow 1.0 学习:模型的保存与恢复(Saver) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

將訓練好的模型參數保存起來,以便以后進行驗證或測試,這是我們經常要做的事情。tf里面提供模型保存的是tf.train.Saver()模塊。

模型保存,先要創建一個Saver對象:如

saver=tf.train.Saver()

在創建這個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=tf.train.Saver(max_to_keep=1)

創建完saver對象后,就可以保存訓練好的模型了,如:

saver.save(sess,'ckpt/mnist.ckpt',global_step=step)

第一個參數sess,這個就不用說了。第二個參數設定保存的路徑和名字,第三個參數將訓練的次數作為后綴加入到模型名字中。

saver.save(sess, 'my-model', global_step=0) ==> ? ? ?filename: 'my-model-0'
...
saver.save(sess, 'my-model', global_step=1000) ==> filename: 'my-model-1000'

看一個mnist實例:

# -*- coding: utf-8 -*- """ Created on Sun Jun 4 10:29:48 2017@author: Administrator """ import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist = 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())saver=tf.train.Saver(max_to_keep=1) 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))saver.save(sess,'ckpt/mnist.ckpt',global_step=i+1) sess.close()

代碼中紅色部分就是保存模型的代碼,雖然我在每訓練完一代的時候,都進行了保存,但后一次保存的模型會覆蓋前一次的,最終只會保存最后一次。因此我們可以節省時間,將保存代碼放到循環之外(僅適用max_to_keep=1,否則還是需要放在循環內).

在實驗中,最后一代可能并不是驗證精度最高的一代,因此我們并不想默認保存最后一代,而是想保存驗證精度最高的一代,則加個中間變量和判斷語句就可以了。

saver=tf.train.Saver(max_to_keep=1) max_acc=0 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))if val_acc>max_acc:max_acc=val_accsaver.save(sess,'ckpt/mnist.ckpt',global_step=i+1) sess.close()

如果我們想保存驗證精度最高的三代,且把每次的驗證精度也隨之保存下來,則我們可以生成一個txt文件用于保存。

saver=tf.train.Saver(max_to_keep=3) 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_accsaver.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=False saver=tf.train.Saver(max_to_keep=3)#訓練階段 if is_train: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_accsaver.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()

標紅的地方,就是與保存、恢復模型相關的代碼。用一個bool型變量is_train來控制訓練和驗證兩個階段。

整個源程序:

# -*- coding: utf-8 -*- """ Created on Sun Jun 4 10:29:48 2017@author: Administrator """ import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist = 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=True saver=tf.train.Saver(max_to_keep=3)#訓練階段 if is_train: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_accsaver.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() View Code

?參考文章:http://blog.csdn.net/u011500062/article/details/51728830

總結

以上是生活随笔為你收集整理的tensorflow 1.0 学习:模型的保存与恢复(Saver)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久影院精品 | caoporn成人| 精品成在人线av无码免费看 | 亚洲免费不卡视频 | 三级视频网址 | 日本精品在线看 | 欧美综合专区 | 日本成人三级电影 | 成人性生交7777 | 亚洲av无码一区二区乱子仑 | 色小妹av| 国产成人精品一区二三区 | 青青草视频在线免费观看 | 国产精品久久久久久影视 | 91精品视频国产 | 四十路av| xxxx精品 | 国产真实乱人偷精品人妻 | xxxxhd欧美 | 天天欲色 | 天天干干干 | 天天做天天爱夜夜爽 | 国产日韩成人 | a色视频 | 国产白丝精品91爽爽久久 | 久久久久久久人妻无码中文字幕爆 | 青娱乐国产 | 午夜视频在线观看国产 | 大地资源高清播放在线观看 | 极品探花在线 | 波多野结衣一区二区三区中文字幕 | 九九精品视频在线 | 久久wwww | 国产精品观看 | 黑人巨大精品欧美一区二区 | 一区二区三区四区在线播放 | 男生裸体视频 | 精品99视频 | 成人免费视频国产在线观看 | 国产成人av在线 | 就要操av | 国产专区欧美专区 | 亚洲精品美女 | 孕妇毛片 | 亚洲综合久久av | 国产中文字幕在线视频 | 久久免费视频一区二区 | 色婷婷av一区二区三区大白胸 | 超碰av在线播放 | 精品一区二区成人免费视频 | 中文字幕在线视频免费播放 | 久久精品大片 | 在线观看日韩国产 | 久久精品国产亚洲av蜜臀色欲 | 亚洲欧洲精品成人久久奇米网 | 五月天激情电影 | 狠狠v欧美v日韩v亚洲ⅴ | 中文字幕日韩高清 | 就去色综合| 久久视频免费在线观看 | 亚洲一二三区在线观看 | 男人的天堂99| 国产精品成人久久久 | 久久精品国产亚洲av高清色欲 | 国产成人精品影院 | 色诱av| 午夜精品久久久久久 | 91在线超碰| 91久久精品美女高潮 | 国产精品一页 | 成人自拍av | 明日花绮罗高潮无打码 | 欧美亚洲韩国 | 无遮挡aaaaa大片免费看 | 香蕉视频国产在线观看 | 天天干天天色 | 婷婷爱五月 | 日本黄色免费视频 | 亚洲成人三区 | 男人天堂中文字幕 | 国产精品七区 | 日韩欧美综合在线 | 午夜视频精品 | 成年人免费网站 | 成人激情视频在线观看 | 99久久久无码国产精品免费蜜柚 | 嫩草视频在线观看免费 | 91免费高清视频 | 久久精品国产亚洲av嫖农村妇女 | 欧美一级网站 | 99精品欧美一区二区三区综合在线 | 高清福利视频 | 麻豆人妻少妇精品无码专区 | 欧美国产日本在线 | 久久精品一区二区在线观看 | 久久国产精品久久久 | 毛片动漫 | 在线精品视频免费观看 | 97在线看|