淺談Tensorflow模型的保存與恢復加載
本篇文章主要介紹了淺談Tensorflow模型的保存與恢復加載,現在分享給大家,也給大家做個參考。一起過來看看吧
近期做了一些反垃圾的工作,除了使用常用的規則匹配過濾等手段,也採用了一些機器學習方法進行分類預測。我們使用TensorFlow進行模型的訓練,訓練好的模型需要保存,預測階段我們需要將模型進行載入還原使用,這涉及TensorFlow模型的保存與復原載入。
總結一下Tensorflow常用的模型保存方式。
儲存checkpoint模型檔(.ckpt)
#首先,TensorFlow提供了一個非常方便的api,tf.train.Saver()來保存和還原一個機器學習模型。
模型保存
使用tf.train.Saver()來保存模型檔案非常方便,以下是一個簡單的範例:
import tensorflow as tf import os def save_model_ckpt(ckpt_file_path): x = tf.placeholder(tf.int32, name='x') y = tf.placeholder(tf.int32, name='y') b = tf.Variable(1, name='b') xy = tf.multiply(x, y) op = tf.add(xy, b, name='op_to_store') sess = tf.Session() sess.run(tf.global_variables_initializer()) path = os.path.dirname(os.path.abspath(ckpt_file_path)) if os.path.isdir(path) is False: os.makedirs(path) tf.train.Saver().save(sess, ckpt_file_path) # test feed_dict = {x: 2, y: 3} print(sess.run(op, feed_dict))
程式產生並儲存四個檔案(在版本0.11之前只會產生三個檔案:checkpoint, model.ckpt , model.ckpt.meta)
checkpoint 文字文件,記錄了模型文件的路徑資訊清單
model.ckpt.data-00000 -of-00001 網路權重資訊
model.ckpt.index .data和.index這兩個文件是二進位文件,保存了模型中的變數參數(權重)資訊
model.ckpt.meta 二進位文件,保存了模型的計算圖結構資訊(模型的網路結構)protobuf
以上是tf.train .Saver().save()的基本用法,save()方法還有很多可設定的參數:
tf.train.Saver().save(sess, ckpt_file_path, global_step=1000)
程式碼如下:tf.train.Saver().save(sess, ckpt_file_path, global_step=1000, write_meta_graph=False)
程式碼如下:tf.train.Saver().save(sess, ckpt_file_path, max_to_keep=4, keep_checkpoint_every_n_hours=2)
同時在tf.train.Saver()類別中,如果我們不指定任何訊息,則會保存所有的參數信息,我們也可以指定部分想要保存的內容,例如只儲存x, y參數(可傳入參數list或dict):
#
tf.train.Saver([x, y]).save(sess, ckpt_file_path)
##ps.在模型訓練過程中需要在儲存後拿到的變數或參數名稱屬性name不能丟,不然模型還原後不能透過get_tensor_by_name()取得。
模型載入還原
針對上面的模型保存例子,還原模型的過程如下:
import tensorflow as tf def restore_model_ckpt(ckpt_file_path): sess = tf.Session() saver = tf.train.import_meta_graph('./ckpt/model.ckpt.meta') # 加载模型结构 saver.restore(sess, tf.train.latest_checkpoint('./ckpt')) # 只需要指定目录就可以恢复所有变量信息 # 直接获取保存的变量 print(sess.run('b:0')) # 获取placeholder变量 input_x = sess.graph.get_tensor_by_name('x:0') input_y = sess.graph.get_tensor_by_name('y:0') # 获取需要进行计算的operator op = sess.graph.get_tensor_by_name('op_to_store:0') # 加入新的操作 add_on_op = tf.multiply(op, 2) ret = sess.run(add_on_op, {input_x: 5, input_y: 5}) print(ret)
首先還原模型結構,然後還原變數(參數)信息,最後我們就可以獲得已訓練的模型中的各種信息了(保存的變量、placeholder變數、operator等),同時可以為取得的變數新增各種新的操作(請參閱以上程式碼註解)。
並且,我們也可以載入部分模型,在此基礎上加入其它操作,具體可以參考官方文件和demo。
針對ckpt模型檔案的保存與還原,stackoverflow上有一個回答解釋比較清晰,可以參考。
儲存單一模型檔(.pb)
我自己有執行過Tensorflow的inception-v3的demo,發現運行結束後會產生一個.pb的模型文件,這個文件是作為後續預測或遷移學習使用的,就一個文件,非常酷炫,也十分方便。
這個過程的主要想法是graph_def檔案中沒有包含網路中的Variable值(通常情況儲存了權重),但卻包含了constant值,所以如果我們能把Variable轉換為constant(使用graph_util.convert_variables_to_constants()函式),即可達到使用一個檔案同時儲存網路架構與權重的目標。
ps:這裡.pb是模型檔案的後綴名,當然我們也可以用其它的後綴(使用.pb與google保持一致╮(╯▽╰)╭)
模型保存
同樣根據上面的例子,一個簡單的demo:
import tensorflow as tf import os from tensorflow.python.framework import graph_util def save_mode_pb(pb_file_path): x = tf.placeholder(tf.int32, name='x') y = tf.placeholder(tf.int32, name='y') b = tf.Variable(1, name='b') xy = tf.multiply(x, y) # 这里的输出需要加上name属性 op = tf.add(xy, b, name='op_to_store') sess = tf.Session() sess.run(tf.global_variables_initializer()) path = os.path.dirname(os.path.abspath(pb_file_path)) if os.path.isdir(path) is False: os.makedirs(path) # convert_variables_to_constants 需要指定output_node_names,list(),可以多个 constant_graph = graph_util.convert_variables_to_constants(sess, sess.graph_def, ['op_to_store']) with tf.gfile.FastGFile(pb_file_path, mode='wb') as f: f.write(constant_graph.SerializeToString()) # test feed_dict = {x: 2, y: 3} print(sess.run(op, feed_dict))
程序生成并保存一个文件
model.pb 二进制文件,同时保存了模型网络结构和参数(权重)信息
模型加载还原
针对上面的模型保存例子,还原模型的过程如下:
import tensorflow as tf from tensorflow.python.platform import gfile def restore_mode_pb(pb_file_path): sess = tf.Session() with gfile.FastGFile(pb_file_path, 'rb') as f: graph_def = tf.GraphDef() graph_def.ParseFromString(f.read()) sess.graph.as_default() tf.import_graph_def(graph_def, name='') print(sess.run('b:0')) input_x = sess.graph.get_tensor_by_name('x:0') input_y = sess.graph.get_tensor_by_name('y:0') op = sess.graph.get_tensor_by_name('op_to_store:0') ret = sess.run(op, {input_x: 5, input_y: 5}) print(ret)
模型的还原过程与checkpoint差不多一样。
《将TensorFlow的网络导出为单个文件》上介绍了TensorFlow保存单个模型文件的方式,大同小异,可以看看。
思考
模型的保存与加载只是TensorFlow中最基础的部分之一,虽然简单但是也必不可少,在实际运用中还需要注意模型何时保存,哪些变量需要保存,如何设计加载实现迁移学习等等问题。
同时TensorFlow的函数和类都在一直变化更新,以后也有可能出现更丰富的模型保存和还原的方法。
选择保存为checkpoint或单个pb文件视业务情况而定,没有特别大的差别。checkpoint保存感觉会更加灵活一些,pb文件更适合线上部署吧(个人看法)。
以上完整代码:github https://github.com/liuyan731/tf_demo
相关推荐:
以上是淺談Tensorflow模型的保存與恢復加載的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

開啟微信,在我中選擇設置,選擇通用後選擇儲存空間,在儲存空間選擇管理,選擇要恢復檔案的對話選擇感嘆號圖示。教學適用型號:iPhone13系統:iOS15.3版本:微信8.0.24解析1先開啟微信,在我的頁面中點選設定選項。 2接著在設定頁面中找到並點選通用選項。 3然後在通用頁面中點選儲存空間。 4接下來在儲存空間頁面中點選管理。 5最後選擇要恢復檔案的對話,點選右側的感嘆號圖示。補充:微信文件一般幾天過期1要是微信接收的文件並沒有點開過的情況下,那在七十二鐘頭之後微信系統會清除掉,要是己經查看了微信

無痕瀏覽是一種非常方便的瀏覽方式,可以在使用電腦或行動裝置上網時保護個人隱私。無痕瀏覽模式通常會阻止瀏覽器記錄存取歷史記錄、保存Cookie和快取文件,以及防止正在瀏覽的網站在瀏覽器中留下任何痕跡。但是,對於一些特殊的情況,我們可能需要恢復無痕瀏覽的瀏覽記錄。首先,我們需要先明確一點:無痕瀏覽模式的目的是保護隱私,防止他人從瀏覽器取得使用者的上網記錄。因此,無痕瀏

在抖音這個充滿創意與活力的短影片平台上,我們不僅可以欣賞到各種精彩內容,還能與志同道合的朋友展開深入的交流。其中,聊天火花作為衡量雙方互動熱度的重要指標,常常在不經意間點燃我們與好友之間的情感連結。然而,有時由於一些原因,聊天火花可能會斷開,那麼如果我們想要恢復聊天火花究竟該如何操作呢,這篇教程攻略就將為大家帶來詳細的內容攻略介紹,希望能幫助到大家。抖音聊天火花斷了怎麼恢復? 1.開啟抖音的訊息頁面,選擇好友聊天。 2、互發訊息聊天。 3.連續發送訊息3天,就可以獲得火花標識。在3天基礎上,互發圖片或視

小紅書擁有豐富的內容,讓大家可以在這裡自由的查看,讓你們每天都可以使用這個軟體解悶,為自己帶來幫助,在使用這個軟體的過程中,有時候會看到各種的美圖,很多人想要保存起來,但是保存後的圖片,都有水印,非常的影響,大家都想要知道在這裡該怎麼保存沒有水印的圖片,小編為你們提供方法,有需要的小伙伴們,都可以馬上的了解使用起來! 1.點擊圖片右上角的「…」複製連結 2.開啟微信小程式 3.微信小程式搜尋紅薯庫 4.進入紅薯庫確定取得連結 5.獲取圖片儲存至手機相冊取得圖片儲存至手機相冊取得圖片儲存至

小米雲相簿怎麼恢復到本地?小米雲相簿APP中是可以恢復到本地,但是多數的小伙伴不知道小米雲相冊如何恢復到本地中,接下來就是小編為用戶帶來的小米雲相冊恢復到本地方法圖文教程,有興趣的用戶快來一起看看吧!小米雲相簿怎麼恢復到本地1、先打開小米手機中的設定功能,主介面選擇【個人頭像】;2、然後進入到小米帳號的介面,點選【雲端服務】功能;3、接著跳到小米雲端服務的功能,選擇其中的【雲端備份】;4、最後在如下圖所示的介面,點選【雲端相簿】即可恢復相簿到本地。

如果我們更換了自己的系統帳戶頭像,但是不想要了,結果找不到win11怎麼更改預設頭像了,其實我們只要找到預設頭像的資料夾就可以恢復了。 win11頭像恢復預設1、先點開底部任務欄的“Windows標誌”2、接著在其中找到並打開“設定”3、然後進入左邊欄的“帳戶”4、隨後點開右側的“帳戶資訊” 5.開啟後,點選選擇照片中的「瀏覽檔案」6、最後進入「C:\ProgramData\Microsoft\UserAccountPictures」路徑就可以找到系統預設頭像圖片了。

Windows10的2019年5月更新有新的、更亮的預設桌面背景。它看起來很棒-帶有新的淺色主題。如果您使用Windows10的深色主題,您可能需要更深的背景。奇怪的是,Windows10的原始桌面背景已從最新版本的Windows10中刪除。您必須從Web下載它或從舊的Windows10PC複製其檔案。儘管我們無法在Microsoft的官方網站上找到此桌布圖片,但您可以從其他來源下載它。我們在Imgur上找到了一份4K解析度的Windows10原始桌面桌布的副本。此外,還有其他尺寸和更多預設壁

小紅書作為一款受歡迎的社群電商平台,用戶可以在這裡分享購物心得、生活點滴等。在使用過程中,有些用戶可能會遇到自己發布的評論被刪除的情況。那麼,小紅書被刪除的評論要怎麼恢復呢?一、小紅書被刪除的評論怎麼恢復?如果發現評論被誤刪,用戶可以選擇靜待小紅書官方團隊進行復原。在這種情況下,最好保持耐心等待,因為官方團隊可能會在一段時間後自動處理並恢復評論。如果您發現評論已被刪除,可以考慮重新發布類似內容。但在重新發佈時,請確保內容符合小紅書的社群準則,以免再次遭到刪除。 3.聯絡小紅書客服:如果認為自己的評論被誤
