91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中TensorFlow神經網絡模型的保存和讀取方法是什么

發布時間:2021-11-04 10:38:39 來源:億速云 閱讀:173 作者:iii 欄目:開發技術

本篇內容主要講解“python中TensorFlow神經網絡模型的保存和讀取方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“python中TensorFlow神經網絡模型的保存和讀取方法是什么”吧!

TensorFlow提供了一個非常簡單的API,即tf.train.Saver類來保存和還原一個神經網絡模型。

下面代碼給出了保存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方法已經發生了更改,現在是V2版本,tf.train.Saver(write_version=tf.train.SaverDef.V1)括號里加入該參數可繼續使用V1,但會報warning,可忽略。若使用saver = tf.train.Saver()則默認使用當前的版本(V2),保存后在save這個文件夾中會出現4個文件,比V1版多出model.ckpt.data-00000-of-00001這個文件,這點感謝評論里那位朋友指出。至于這個文件的含義到目前我仍不是很清楚,也沒查到具體資料,TensorFlow15年底開源到現在很多類啊函數都一直發生著變動,或被更新或被棄用,可能一些代碼在當時是沒問題的,但過了一大段時間后再跑可能就會報錯,在此注明事件時間:2017.4.30

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

TensorFlow模型會保存在后綴為.ckpt的文件中。保存后在save這個文件夾中會出現3個文件,因為TensorFlow會將計算圖的結構和圖上參數取值分開保存。

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

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

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

python中TensorFlow神經網絡模型的保存和讀取方法是什么

下面代碼給出了加載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")

運行結果:

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

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

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

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層神經網絡模型,但現在想寫一個6層的神經網絡,那么可以將之前5層神經網絡中的參數直接加載到新的模型,而僅僅將最后一層神經網絡重新訓練。

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

到此,相信大家對“python中TensorFlow神經網絡模型的保存和讀取方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

霍林郭勒市| 唐海县| 宁乡县| 长海县| 南昌市| 鄂尔多斯市| 库尔勒市| 永平县| 当阳市| 扎赉特旗| 庆阳市| 石狮市| 湟源县| 沅陵县| 高台县| 奈曼旗| 杭州市| 富源县| 宣化县| 四平市| 安吉县| 龙口市| 随州市| 宁远县| 文昌市| 新化县| 含山县| 平邑县| 门头沟区| 平谷区| 昌江| 中卫市| 化州市| 抚远县| 革吉县| 南城县| 萨嘎县| 太仆寺旗| 万源市| 故城县| 镇康县|