首頁 後端開發 Python教學 淺談Tensorflow模型的保存與恢復加載

淺談Tensorflow模型的保存與恢復加載

Apr 26, 2018 pm 04:40 PM
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)

  1. checkpoint 文字文件,記錄了​​模型文件的路徑資訊清單

  2. model.ckpt.data-00000 -of-00001 網路權重資訊

  3. model.ckpt.index .data和.index這兩個文件是二進位文件,保存了模型中的變數參數(權重)資訊

  4. model.ckpt.meta 二進位文件,保存了模型的計算圖結構資訊(模型的網路結構)protobuf

以上是tf.train .Saver().save()的基本用法,save()方法還有很多可設定的參數:


tf.train.Saver().save(sess, ckpt_file_path, global_step=1000)
登入後複製


##加上global_step參數代表在每1000次迭代後保存模型,會在模型檔後加上"-1000",model.ckpt-1000.index, model.ckpt-1000.meta, model.ckpt.data- 1000-00000-of-00001


每1000次迭代儲存一次模型,但是模型的結構資訊檔不會變,就只用1000次迭代時保存一下,不用對應的每1000次儲存一次,所以當我們不需要儲存meta檔案時,可以加上write_meta_graph=False參數,如下:



##複製程式碼

程式碼如下:

tf.train.Saver().save(sess, ckpt_file_path, global_step=1000, write_meta_graph=False)
登入後複製
如果想每兩小時保存一次模型,並且只保存最新的4個模型,可以加上使用max_to_keep(預設值為5,如果想每訓練一個epoch就保存一次,可以將其設定為None或0,但沒啥用不推薦), keep_checkpoint_every_n_hours參數,如下:



#複製程式碼

程式碼如下:

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上有一個回答解釋比較清晰,可以參考。

同時cv-tricks.com上面的TensorFlow模型保存與復原的教學也非常好,可以參考。

《tensorflow 1.0 學習:模型的保存與復原(Saver)》有一些Saver使用技巧。

儲存單一模型檔(.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模型保存和提取方法示例


以上是淺談Tensorflow模型的保存與恢復加載的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1666
14
CakePHP 教程
1426
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1253
24
微信檔案過期怎麼恢復 微信的過期檔案能恢復嗎 微信檔案過期怎麼恢復 微信的過期檔案能恢復嗎 Feb 22, 2024 pm 02:46 PM

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

如何恢復無痕模式下的瀏覽記錄 如何恢復無痕模式下的瀏覽記錄 Feb 19, 2024 pm 04:22 PM

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

抖音怎麼恢復聊天火花 抖音怎麼恢復聊天火花 Mar 16, 2024 pm 01:25 PM

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

小紅書怎麼保存無浮水印圖片 小紅書怎麼拿圖沒有浮水印 小紅書怎麼保存無浮水印圖片 小紅書怎麼拿圖沒有浮水印 Mar 22, 2024 pm 03:40 PM

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

小米雲相簿怎麼恢復到本地 小米雲相簿怎麼恢復到本地 Feb 24, 2024 pm 03:28 PM

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

恢復win11預設頭像的教程 恢復win11預設頭像的教程 Jan 02, 2024 pm 12:43 PM

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

win10怎麼恢復預設壁紙 win10怎麼恢復預設壁紙 Feb 10, 2024 pm 10:51 PM

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

小紅書被刪除的留言怎麼恢復?被刪除的評論有提示嗎? 小紅書被刪除的留言怎麼恢復?被刪除的評論有提示嗎? Mar 27, 2024 am 11:56 AM

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

See all articles