最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

import tensorflow as tf

# 聲明兩個變量
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類用于保存模型
with tf.Session() as sess:
    sess.run(init_op)
    print("v1:", sess.run(v1)) # 打印v1、v2的值一會讀取之后對比
    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)括號里加入該參數(shù)可繼續(xù)使用V1,但會報warning,可忽略。若使用saver = tf.train.Saver()則默認使用當前的版本(V2),保存后在save這個文件夾中會出現(xiàn)4個文件,比V1版多出model.ckpt.data-00000-of-00001這個文件,這點感謝評論里那位朋友指出。至于這個文件的含義到目前我仍不是很清楚,也沒查到具體資料,TensorFlow15年底開源到現(xiàn)在很多類啊函數(shù)都一直發(fā)生著變動,或被更新或被棄用,可能一些代碼在當時是沒問題的,但過了一大段時間后再跑可能就會報錯,在此注明事件時間:2017.4.30

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

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

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

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

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

這里寫圖片描述

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

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

import tensorflow as tf

# 使用和保存模型代碼中一樣的方式來聲明變量
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類用于保存模型
with tf.Session() as sess:
    saver.restore(sess, "save/model.ckpt") # 即將固化到硬盤中的Session從保存路徑再讀取出來
    print("v1:", sess.run(v1)) # 打印v1、v2的值和之前的進行對比
    print("v2:", sess.run(v2))
    print("Model Restored")

運行結(jié)果:

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

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

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

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

運行程序,輸出:

[[ 0.76705766  1.82217288]]

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

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

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

相關(guān)文章

  • Python高級編程之繼承問題詳解(super與mro)

    Python高級編程之繼承問題詳解(super與mro)

    這篇文章主要介紹了Python高級編程之繼承問題,結(jié)合實例形式詳細分析了Python多繼承、MRO順序及super調(diào)用父類等相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • 一文教你使用Python繪制絲滑的K線圖

    一文教你使用Python繪制絲滑的K線圖

    K線圖是將各種股票某一時間單位內(nèi)的開盤價,收盤價,最高價,最低價,通過繪圖方式表現(xiàn)出來的一種圖形,下面我們來看看如何使用Python實現(xiàn)絲滑繪制K線圖吧
    2025-04-04
  • Flask框架中的session設(shè)置詳解

    Flask框架中的session設(shè)置詳解

    Flask是一個使用Python編寫的輕量級Web應(yīng)用框架。其WSGI工具箱采用Werkzeug,模板引擎則使用 Jinja2 。Flask使用BSD授權(quán)。Flask也被稱為 “microframework”,因為它使用簡單的核心,用extension增加其他功能
    2023-02-02
  • Python利用prettytable實現(xiàn)格式化輸出內(nèi)容

    Python利用prettytable實現(xiàn)格式化輸出內(nèi)容

    Python有一個第三方模塊叫?prettytable,專門用來將數(shù)據(jù)格式輸出。本文將通過示例為大家詳細講講prettytable的用法,感興趣的可以了解一下
    2022-07-07
  • 基于Python實現(xiàn)射擊小游戲的制作

    基于Python實現(xiàn)射擊小游戲的制作

    這篇文章主要介紹了如何利用Python制作一個自己專屬的第一人稱射擊小游戲,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起動手試一試
    2022-04-04
  • Python爬蟲實戰(zhàn)之爬取某寶男裝信息

    Python爬蟲實戰(zhàn)之爬取某寶男裝信息

    網(wǎng)絡(luò)爬蟲是一種按照一定的規(guī)則自動瀏覽、檢索網(wǎng)頁信息的程序或者腳本。網(wǎng)絡(luò)爬蟲能夠自動請求網(wǎng)頁,并將所需要的數(shù)據(jù)抓取下來。本文將為大家介紹如何利用爬蟲獲取某寶男裝信息,感興趣的小伙伴可以了解一下
    2021-12-12
  • Python實現(xiàn)的購物車功能示例

    Python實現(xiàn)的購物車功能示例

    這篇文章主要介紹了Python實現(xiàn)的購物車功能,涉及Python通過交互與數(shù)值運算實現(xiàn)購物車功能的相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • python讀取注冊表中值的方法

    python讀取注冊表中值的方法

    在Python的標準庫中,_winreg.pyd可以操作Windows的注冊表,另外第三方的win32庫封裝了大量的Windows API,使用起來也很方便。不過這里介紹的是使用_winreg操作注冊表,畢竟是Python自帶的標準庫,無需安裝第三方庫
    2013-04-04
  • Python實現(xiàn)GPU加速的基本操作

    Python實現(xiàn)GPU加速的基本操作

    本文簡單介紹了Python實現(xiàn)GPU加速的基本操作,文中運用大量代碼講解的非常詳細,有一定的參考價值,需要學習相關(guān)知識的小伙伴一起來看看吧
    2021-08-08
  • 使用Python快速遍歷文件夾下所有文件的方法總結(jié)

    使用Python快速遍歷文件夾下所有文件的方法總結(jié)

    在日常的編程工作中,我們經(jīng)常會遇到需要遍歷文件夾下所有文件的情況,無論是處理大量的數(shù)據(jù)文件、進行文件系統(tǒng)的分析,還是實現(xiàn)復雜的自動化任務(wù),高效地遍歷文件夾下的所有文件都是一項非常重要的技能,在本文中,我們將深入探討如何使用 Python 快速遍歷文件夾下的所有文件
    2024-11-11

最新評論

伊宁市| 尖扎县| 洪湖市| 鄯善县| 顺昌县| 蕉岭县| 卓尼县| 新闻| 扎赉特旗| 东阳市| 西青区| 吉木萨尔县| 龙川县| 宁海县| 靖宇县| 天镇县| 莎车县| 昭通市| 璧山县| 南通市| 定襄县| 衡东县| 余姚市| 新邵县| 体育| 资溪县| 汝阳县| 石楼县| 武宣县| 漯河市| 巴彦淖尔市| 马边| 犍为县| 和林格尔县| 大竹县| 台北市| 枣阳市| 白沙| 洞口县| 华蓥市| 工布江达县|