欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python深度學(xué)習(xí)TensorFlow神經(jīng)網(wǎng)絡(luò)模型的保存和讀取

 更新時(shí)間:2021年11月04日 09:15:45   作者:零尾  
這篇文章主要為大家介紹了python深度學(xué)習(xí)TensorFlow神經(jīng)網(wǎng)絡(luò)如何將訓(xùn)練得到的模型保存下來(lái)方便下次直接使用。為了讓訓(xùn)練結(jié)果可以復(fù)用,需要將訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)模型持久化

之前的筆記里實(shí)現(xiàn)了softmax回歸分類(lèi)、簡(jiǎn)單的含有一個(gè)隱層的神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)等等,但是這些代碼在訓(xùn)練完成之后就直接退出了,并沒(méi)有將訓(xùn)練得到的模型保存下來(lái)方便下次直接使用。為了讓訓(xùn)練結(jié)果可以復(fù)用,需要將訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)模型持久化,這就是這篇筆記里要寫(xiě)的東西。

TensorFlow提供了一個(gè)非常簡(jiǎn)單的API,即tf.train.Saver類(lèi)來(lái)保存和還原一個(gè)神經(jīng)網(wǎng)絡(luò)模型。

下面代碼給出了保存TensorFlow模型的方法:

import tensorflow as tf

# 聲明兩個(gè)變量
v1 = tf.Variable(tf.random_normal([1, 2]), name="v1")
v2 = tf.Variable(tf.random_normal([2, 3]), name="v2")
init_op = tf.global_variables_initializer() # 初始化全部變量
saver = tf.train.Saver(write_version=tf.train.SaverDef.V1) # 聲明tf.train.Saver類(lèi)用于保存模型
with tf.Session() as sess:
    sess.run(init_op)
    print("v1:", sess.run(v1)) # 打印v1、v2的值一會(huì)讀取之后對(duì)比
    print("v2:", sess.run(v2))
    saver_path = saver.save(sess, "save/model.ckpt")  # 將模型保存到save/model.ckpt文件
    print("Model saved in file:", saver_path)

注:Saver方法已經(jīng)發(fā)生了更改,現(xiàn)在是V2版本,tf.train.Saver(write_version=tf.train.SaverDef.V1)括號(hào)里加入該參數(shù)可繼續(xù)使用V1,但會(huì)報(bào)warning,可忽略。若使用saver = tf.train.Saver()則默認(rèn)使用當(dāng)前的版本(V2),保存后在save這個(gè)文件夾中會(huì)出現(xiàn)4個(gè)文件,比V1版多出model.ckpt.data-00000-of-00001這個(gè)文件,這點(diǎn)感謝評(píng)論里那位朋友指出。至于這個(gè)文件的含義到目前我仍不是很清楚,也沒(méi)查到具體資料,TensorFlow15年底開(kāi)源到現(xiàn)在很多類(lèi)啊函數(shù)都一直發(fā)生著變動(dòng),或被更新或被棄用,可能一些代碼在當(dāng)時(shí)是沒(méi)問(wèn)題的,但過(guò)了一大段時(shí)間后再跑可能就會(huì)報(bào)錯(cuò),在此注明事件時(shí)間:2017.4.30

這段代碼中,通過(guò)saver.save函數(shù)將TensorFlow模型保存到了save/model.ckpt文件中,這里代碼中指定路徑為"save/model.ckpt",也就是保存到了當(dāng)前程序所在文件夾里面的save文件夾中。

TensorFlow模型會(huì)保存在后綴為.ckpt的文件中。保存后在save這個(gè)文件夾中會(huì)出現(xiàn)3個(gè)文件,因?yàn)門(mén)ensorFlow會(huì)將計(jì)算圖的結(jié)構(gòu)和圖上參數(shù)取值分開(kāi)保存。

checkpoint文件保存了一個(gè)目錄下所有的模型文件列表,這個(gè)文件是tf.train.Saver類(lèi)自動(dòng)生成且自動(dòng)維護(hù)的。在 checkpoint文件中維護(hù)了由一個(gè)tf.train.Saver類(lèi)持久化的所有TensorFlow模型文件的文件名。當(dāng)某個(gè)保存的TensorFlow模型文件被刪除時(shí),這個(gè)模型所對(duì)應(yīng)的文件名也會(huì)從checkpoint文件中刪除。checkpoint中內(nèi)容的格式為CheckpointState Protocol Buffer.

model.ckpt.meta文件保存了TensorFlow計(jì)算圖的結(jié)構(gòu),可以理解為神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)結(jié)構(gòu)
TensorFlow通過(guò)元圖(MetaGraph)來(lái)記錄計(jì)算圖中節(jié)點(diǎn)的信息以及運(yùn)行計(jì)算圖中節(jié)點(diǎn)所需要的元數(shù)據(jù)。TensorFlow中元圖是由MetaGraphDef Protocol Buffer定義的。MetaGraphDef 中的內(nèi)容構(gòu)成了TensorFlow持久化時(shí)的第一個(gè)文件。保存MetaGraphDef 信息的文件默認(rèn)以.meta為后綴名,文件model.ckpt.meta中存儲(chǔ)的就是元圖數(shù)據(jù)。

model.ckpt文件保存了TensorFlow程序中每一個(gè)變量的取值,這個(gè)文件是通過(guò)SSTable格式存儲(chǔ)的,可以大致理解為就是一個(gè)(key,value)列表。model.ckpt文件中列表的第一行描述了文件的元信息,比如在這個(gè)文件中存儲(chǔ)的變量列表。列表剩下的每一行保存了一個(gè)變量的片段,變量片段的信息是通過(guò)SavedSlice Protocol Buffer定義的。SavedSlice類(lèi)型中保存了變量的名稱(chēng)、當(dāng)前片段的信息以及變量取值。TensorFlow提供了tf.train.NewCheckpointReader類(lèi)來(lái)查看model.ckpt文件中保存的變量信息。如何使用tf.train.NewCheckpointReader類(lèi)這里不做說(shuō)明,自查。

這里寫(xiě)圖片描述

下面代碼給出了加載TensorFlow模型的方法:

可以對(duì)比一下v1、v2的值是隨機(jī)初始化的值還是和之前保存的值是一樣的?

import tensorflow as tf

# 使用和保存模型代碼中一樣的方式來(lái)聲明變量
v1 = tf.Variable(tf.random_normal([1, 2]), name="v1")
v2 = tf.Variable(tf.random_normal([2, 3]), name="v2")
saver = tf.train.Saver() # 聲明tf.train.Saver類(lèi)用于保存模型
with tf.Session() as sess:
    saver.restore(sess, "save/model.ckpt") # 即將固化到硬盤(pán)中的Session從保存路徑再讀取出來(lái)
    print("v1:", sess.run(v1)) # 打印v1、v2的值和之前的進(jìn)行對(duì)比
    print("v2:", sess.run(v2))
    print("Model Restored")

運(yùn)行結(jié)果:

v1: [[ 0.76705766  1.82217288]]
v2: [[-0.98012197  1.2369734   0.5797025 ]
 [ 2.50458145  0.81897354  0.07858191]]
Model Restored

這段加載模型的代碼基本上和保存模型的代碼是一樣的。也是先定義了TensorFlow計(jì)算圖上所有的運(yùn)算,并聲明了一個(gè)tf.train.Saver類(lèi)。兩段唯一的不同是,在加載模型的代碼中沒(méi)有運(yùn)行變量的初始化過(guò)程,而是將變量的值通過(guò)已經(jīng)保存的模型加載進(jìn)來(lái)。
也就是說(shuō)使用TensorFlow完成了一次模型的保存和讀取的操作。

如果不希望重復(fù)定義圖上的運(yùn)算,也可以直接加載已經(jīng)持久化的圖:

import tensorflow as tf
# 在下面的代碼中,默認(rèn)加載了TensorFlow計(jì)算圖上定義的全部變量
# 直接加載持久化的圖
saver = tf.train.import_meta_graph("save/model.ckpt.meta")
with tf.Session() as sess:
    saver.restore(sess, "save/model.ckpt")
    # 通過(guò)張量的名稱(chēng)來(lái)獲取張量
    print(sess.run(tf.get_default_graph().get_tensor_by_name("v1:0")))

運(yùn)行程序,輸出:

[[ 0.76705766  1.82217288]]

有時(shí)可能只需要保存或者加載部分變量。
比如,可能有一個(gè)之前訓(xùn)練好的5層神經(jīng)網(wǎng)絡(luò)模型,但現(xiàn)在想寫(xiě)一個(gè)6層的神經(jīng)網(wǎng)絡(luò),那么可以將之前5層神經(jīng)網(wǎng)絡(luò)中的參數(shù)直接加載到新的模型,而僅僅將最后一層神經(jīng)網(wǎng)絡(luò)重新訓(xùn)練。

為了保存或者加載部分變量,在聲明tf.train.Saver類(lèi)時(shí)可以提供一個(gè)列表來(lái)指定需要保存或者加載的變量。比如在加載模型的代碼中使用saver = tf.train.Saver([v1])命令來(lái)構(gòu)建tf.train.Saver類(lèi),那么只有變量v1會(huì)被加載進(jìn)來(lái)。

以上就是python深度學(xué)習(xí)TensorFlow神經(jīng)網(wǎng)絡(luò)模型的保存和讀取的詳細(xì)內(nèi)容,更多關(guān)于TensorFlow網(wǎng)絡(luò)模型保存和讀取的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python倒序for循環(huán)實(shí)例

    python倒序for循環(huán)實(shí)例

    這篇文章主要介紹了python倒序for循環(huán)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python的閉包和裝飾器你真的了解嗎

    Python的閉包和裝飾器你真的了解嗎

    這篇文章主要為大家詳細(xì)介紹了Python的閉包和裝飾器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • Python識(shí)別快遞條形碼及Tesseract-OCR使用詳解

    Python識(shí)別快遞條形碼及Tesseract-OCR使用詳解

    這篇文章主要介紹了Python識(shí)別快遞條形碼及Tesseract-OCR使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • python讓圖片按照exif信息里的創(chuàng)建時(shí)間進(jìn)行排序的方法

    python讓圖片按照exif信息里的創(chuàng)建時(shí)間進(jìn)行排序的方法

    這篇文章主要介紹了python讓圖片按照exif信息里的創(chuàng)建時(shí)間進(jìn)行排序的方法,涉及Python操作圖片exif獲取信息的技巧,需要的朋友可以參考下
    2015-03-03
  • python numpy 顯示圖像陣列的實(shí)例

    python numpy 顯示圖像陣列的實(shí)例

    今天小編就為大家分享一篇python numpy 顯示圖像陣列的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Python使用Selenium WebDriver的入門(mén)介紹及安裝教程(最新推薦)

    Python使用Selenium WebDriver的入門(mén)介紹及安裝教程(最新推薦)

    這篇文章主要介紹了Python使用Selenium WebDriver的入門(mén)介紹及安裝教程,本文使用環(huán)境為python3.11+win10 64位+firefox瀏覽器,所以本文使用的瀏覽器驅(qū)動(dòng)是Firefox的geckodriver ,如果你使用的是其他瀏覽器,那么選擇自己對(duì)應(yīng)的瀏覽器驅(qū)動(dòng)程序即可,需要的朋友可以參考下
    2023-04-04
  • Django Session和Cookie分別實(shí)現(xiàn)記住用戶(hù)登錄狀態(tài)操作

    Django Session和Cookie分別實(shí)現(xiàn)記住用戶(hù)登錄狀態(tài)操作

    這篇文章主要介紹了Django Session和Cookie分別實(shí)現(xiàn)記住用戶(hù)登錄狀態(tài)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • 詳解python定時(shí)簡(jiǎn)單爬取網(wǎng)頁(yè)新聞存入數(shù)據(jù)庫(kù)并發(fā)送郵件

    詳解python定時(shí)簡(jiǎn)單爬取網(wǎng)頁(yè)新聞存入數(shù)據(jù)庫(kù)并發(fā)送郵件

    這篇文章主要介紹了python定時(shí)簡(jiǎn)單爬取網(wǎng)頁(yè)新聞存入數(shù)據(jù)庫(kù)并發(fā)送郵件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 使用python實(shí)現(xiàn)個(gè)性化詞云的方法

    使用python實(shí)現(xiàn)個(gè)性化詞云的方法

    最近看到可視化的詞云,看到網(wǎng)上也很多這樣的工具,但是都不怎么完美,有些不支持中文,有的中文詞頻統(tǒng)計(jì)得莫名其妙、有的不支持自定義形狀、所有的都不能自定義顏色,于是網(wǎng)上找了一下,決定用python繪制詞云
    2017-06-06
  • 如何在Python中導(dǎo)入EXCEL數(shù)據(jù)

    如何在Python中導(dǎo)入EXCEL數(shù)據(jù)

    這篇文章主要介紹了使用Python處理EXCEL基礎(chǔ)操作篇1,如何在Python中導(dǎo)入EXCEL數(shù)據(jù),文中提供了解決思路和部分實(shí)現(xiàn)代碼,一起來(lái)看看吧
    2023-03-03

最新評(píng)論