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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TensorFlow模型持久化

發(fā)布時間:2024/5/17 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TensorFlow模型持久化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

模型持久化的目的在于可以使模型訓(xùn)練后的結(jié)果重復(fù)使用,節(jié)省重復(fù)訓(xùn)練模型的時間。

模型保存

train.Saver類是TensorFlow提供的用于保存和還原模型的API,使用非常簡單。

import tensorflow as tf# 聲明兩個變量并計算其加和 a = tf.Variable(tf.constant([1.0, 2.0], shape=[2]), name='a') b = tf.Variable(tf.constant([3.0, 4.0], shape=[2]), name='b') result = a + b# 初始化全部變量的操作 init_op = tf.global_variables_initializer() # 定義 Saver 類對象用于保存模型 saver = tf.train.Saver()with tf.Session() as sess:sess.run(init_op)saver.save(sess, "./model/model.ckpt")

上面的代碼實現(xiàn)了一個簡單的TensorFlow模型持久化的功能。

save()函數(shù)的sess參數(shù)用于指定要保存的模型會話,save_path參數(shù)用于指定路徑。

通過Saver類的save()函數(shù)將TensorFlow模型保存到一個指定路徑下的model.ckpt文件中。

(TensorFlow模型一般會保存在文件名為.ckpt的文件中,可以省略后綴名,但是好的編程習(xí)慣是對其加以指定)

雖然上面的程序只制定了一個文件路徑,但是在這個文件目錄下回出現(xiàn)4個文件:

  • checkpoint文件是一個文本文件,保存了一個目錄下所有的模型文件列表。該文件會被自動更新,當(dāng)有更多模型被保存到model目錄下時,文件內(nèi)容會更新為最新的訓(xùn)練模型。
  • model.ckpt.data-00000-of-00001文件是一個二進制文件,保存了TensorFlow中每一個變量的取值。
  • model.ckpt.index文件是一個二進制文件,保存了每一個變量的名稱,是一個string-string的table,其中table的key值為tensor名,value值為BundleEntryProto。
  • model.ckpt.meta文件是一個二進制文件,保存了計算圖的結(jié)構(gòu)。

將一個模型文件分成多個文件保存的原因是TensorFlow會將模型的計算圖結(jié)構(gòu)以及參數(shù)的取值分開來保存。

模型加載

TensorFlow也提供了相應(yīng)的函數(shù)來加載保存的模型。

with tf.Session() as sess:saver.restore(sess, "./model/model.ckpt")print(sess.run(result))

輸出:

加載模型的代碼和保存模型的代碼相似,但是省略了初始化全部變量的過程。

使用restore()函數(shù)需要在模型參數(shù)恢復(fù)前定義計算圖上的所有運算,并且變量名需要與模型存在的變量名保持一致,這樣就可以將變量的值通過已保存的模型加載進來。

有時我們可能不希望重復(fù)定義計算圖上的計算,太繁瑣了,TensorFlow提供了import_meta_graph()函數(shù)加載模型的計算圖。

import_meta_graph()函數(shù)的輸入?yún)?shù)為.meta文件的路徑,返回一個Saver類實例,再調(diào)用這個實例的restore()函數(shù)就可以恢復(fù)參數(shù)了。

saver = tf.train.import_meta_graph("./model/model.ckpt.meta")with tf.Session() as sess:saver.restore(sess, "./model/model.ckpt")# 獲取默認(rèn)計算圖上指定節(jié)點處的張量print(sess.run(tf.get_default_graph().get_tensor_by_name("add:0")))

輸出:

.ckpt.meta文件保存了計算圖的結(jié)構(gòu),通過import_meta_graph()函數(shù)將計算圖導(dǎo)入到程序中并傳遞給saver,之后在會話中通過restore()函數(shù)對該計算圖中變量的值進行加載。

get_tensor_by_name()函數(shù)用于獲取指定節(jié)點處的張量(add:0 表示add節(jié)點的第一個輸出)。

總結(jié)

以上是生活随笔為你收集整理的TensorFlow模型持久化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。