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

使用tensorflow保存和恢復模型saver.restore

 更新時間:2024年02月23日 16:35:58   作者:做一只AI小能手  
這篇文章主要介紹了使用tensorflow保存和恢復模型saver.restore方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

tensorflow保存和恢復模型saver.restore

本文只對一些細節(jié)點做補充,大體的步驟就不詳述了

保存模型

① 首先我使用的是tensorflow-gpu 1.4.0

② 這個版本生成的ckpt文件是這樣的:

其中.meta存放的是網(wǎng)絡模型和所有的變量;

.index 和.data一起存放變量數(shù)據(jù)

-0 -500表示checkpoint點

③ 保存的配置(一定細看代碼注釋!??!)

import tensorflow as tf
w1 = tf.Variable(變量的初始化, name='w1')
w2 = tf.Variable(變量的初始化, name='w2')
saver = tf.train.Saver([w1,w2],max_to_keep=5, keep_checkpoint_every_n_hours=2)   # 這里是細節(jié)部分,可以指定保存的變量,每兩小時保存最近的5個模型
sess = tf.Session()
sess.run(tf.global_variables_initializer())
saver.save(sess, './checkpoint_dir/MyModel',global_step=step,write_meta_graph=False))   # 因為模型沒必要多次保存,所以寫為False

恢復模型(一定細看代碼注釋!??!)

代碼:

import tensorflow as tf
with tf.Session() as sess:    
    saver = tf.train.import_meta_graph(模型路徑)  # 模型路徑中必須指定到具體的模型下如:xx.ckpt-500.meta,且一般來講,所有模型都是一樣的,如果沒有改變模型的條件下。
    # 下面的restore就是在當前的sess下恢復了所有的變量
    saver.restore(sess,數(shù)據(jù)路徑)  # 數(shù)據(jù)路徑也必須指定到具體某個模型的數(shù)據(jù),但創(chuàng)建這個路徑的方法很多,比如調(diào)用最后一個保存的模型tf.train.latest_checkpoint('./checkpoint_dir'),也可以是xx.ckpt-500.data,并且這兩個是等效的,如果是xx.ckpt-0.data,就是第一個模型的數(shù)據(jù)
    print(sess.run('w1:0'))  # 這里的w1必須加上:0

tensorflow里的,保存和恢復模型的方式

重點在于,第一個文件用于 訓練,保存圖meta和訓練好的參數(shù)data(后綴),在另一個文件中導入這個圖和訓練好的參數(shù),用于預測或者接著訓練。

大大減少了另一個文件里的 重復

第一種情況

產(chǎn)生變量的代碼和恢復變量的代碼在同一個文件時,可以直接如下調(diào)用:

# 建模型
saver = tf.train.Saver()
 
with tf.Session() as sess:
    # 存模型,注意此處的model是文件名,不是路徑
    saver.save(sess, "/tmp/model")
 
with tf.Session() as sess:
    # 恢復模型
    saver.restore(sess, "/tmp/model")

第二種情況

不想在另一個文件中,把產(chǎn)生變量的 一大堆代碼重敲一遍,可以直接從保存好的 meta文件和data文件中恢復出來

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/9/9 20:49
# @Author  : ZZL
# @File    : 保存檢查點文件,并恢復.py
import tensorflow as tf
# Saving contents and operations.
v1 = tf.placeholder(tf.float32, name="v1")
v2 = tf.placeholder(tf.float32, name="v2")
v3 = tf.multiply(v1, v2)
vx = tf.Variable(10.0, name="vx")
v4 = tf.add(v3, vx, name="v4")
saver = tf.train.Saver([vx])
with tf.Session() as sess:
    with tf.device('/cpu:0'):
        sess.run(tf.global_variables_initializer())
        sess.run(vx.assign(tf.add(vx, vx)))
        result = sess.run(v4, feed_dict={v1: 12.0, v2: 3.3})
        print(result)
        print(saver.save(sess, "./model_ex1"))  # 該方法返回新創(chuàng)建的檢查點文件的路徑前綴。這個字符串可以直接傳遞給對“restore()”的調(diào)用。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/9/9 20:54
# @Author  : ZZL
# @File    : 恢復文件.py
import  tensorflow as tf
 
saver = tf.train.import_meta_graph("./model_ex1.meta")
sess = tf.Session()
saver.restore(sess, "./model_ex1")
result = sess.run("v4:0", feed_dict={"v1:0": 12.0, "v2:0": 3.3})
print(result)

先來個空圖,loaded_graph,在會話中,導入之前構建好的圖的文件 后綴 meta,loader.restore(sess, save_model_path)

在當前的loaded_graph中,導入構建好的圖和圖上的變量值。

def test_model():
 
    test_features, test_labels = pickle.load(open('preprocess_test.p', mode='rb'))
    loaded_graph = tf.Graph()  # <tensorflow.python.framework.ops.Graph object at 0x0000017CB3702320>
#     print( loaded_graph)
#     print(tf.get_default_graph())  # <tensorflow.python.framework.ops.Graph object at 0x0000017C9A0C0C50>
    with tf.Session(graph=loaded_graph) as sess:
        # 讀取模型
        loader = tf.train.import_meta_graph(save_model_path + '.meta')
        print(loader)
        loader.restore(sess, save_model_path)
 
        print(tf.get_default_graph())  # <tensorflow.python.framework.ops.Graph object at 0x0000017CB3702320>
        # 從已經(jīng)讀入的模型中 獲取tensors 
        loaded_x = loaded_graph.get_tensor_by_name('x:0')
        loaded_y = loaded_graph.get_tensor_by_name('y:0')
        loaded_keep_prob = loaded_graph.get_tensor_by_name('keep_prob:0')
        loaded_logits = loaded_graph.get_tensor_by_name('logits:0')
        loaded_acc = loaded_graph.get_tensor_by_name('accuracy:0')
        
        # 獲取每個batch的準確率,再求平均值,這樣可以節(jié)約內(nèi)存
        test_batch_acc_total = 0
        test_batch_count = 0
        
        for test_feature_batch, test_label_batch in helper.batch_features_labels(test_features, test_labels, batch_size):
            test_batch_acc_total += sess.run(
                loaded_acc,
                feed_dict={loaded_x: test_feature_batch, loaded_y: test_label_batch, loaded_keep_prob: 1.0})
            test_batch_count += 1

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Pandas繪圖函數(shù)超詳細講解

    Pandas繪圖函數(shù)超詳細講解

    matplotlib要組裝一張圖表,需要的各個基礎組件對象。相對工作量較大,但在pandas中我們有行標簽和列標簽以及分組信息。原本制作一張圖表需要一大堆matplotlib代碼。在pandas中只需要一兩條代碼就可以了,今天記錄一下,pandas中常見的幾個繪制圖表的方法
    2022-12-12
  • python匿名函數(shù)用法實例分析

    python匿名函數(shù)用法實例分析

    這篇文章主要介紹了python匿名函數(shù)用法,結合實例形式分析了Python匿名函數(shù)的特點、功能及相關使用方法,需要的朋友可以參考下
    2019-08-08
  • 查看keras的默認backend實現(xiàn)方式

    查看keras的默認backend實現(xiàn)方式

    這篇文章主要介紹了查看keras的默認backend實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • PyQt5 QTableView設置某一列不可編輯的方法

    PyQt5 QTableView設置某一列不可編輯的方法

    今天小編就為大家分享一篇PyQt5 QTableView設置某一列不可編輯的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 對PyQt5中樹結構的實現(xiàn)方法詳解

    對PyQt5中樹結構的實現(xiàn)方法詳解

    今天小編就為大家分享一篇對PyQt5中樹結構的實現(xiàn)方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python cookbook(數(shù)據(jù)結構與算法)從字典中提取子集的方法示例

    Python cookbook(數(shù)據(jù)結構與算法)從字典中提取子集的方法示例

    這篇文章主要介紹了Python cookbook(數(shù)據(jù)結構與算法)從字典中提取子集的方法,涉及Python字典推導式的相關使用技巧,需要的朋友可以參考下
    2018-03-03
  • 使用Python文件讀寫,自定義分隔符(custom delimiter)

    使用Python文件讀寫,自定義分隔符(custom delimiter)

    這篇文章主要介紹了使用Python文件讀寫,自定義分隔符(custom delimiter),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • pycharm調(diào)試功能如何實現(xiàn)跳到循環(huán)的某一步

    pycharm調(diào)試功能如何實現(xiàn)跳到循環(huán)的某一步

    這篇文章主要介紹了pycharm調(diào)試功能如何實現(xiàn)跳到循環(huán)的某一步問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Pytorch精準記錄函數(shù)運行時間的方法

    Pytorch精準記錄函數(shù)運行時間的方法

    參考Pytorch官方文檔對CUDA的描述,GPU的運算是異步執(zhí)行的,一般來說,異步計算的效果對于調(diào)用者來說是不可見的,異步計算的后果是,沒有同步的時間測量是不準確的,所以本文給大家介紹了Pytorch如何精準記錄函數(shù)運行時間,需要的朋友可以參考下
    2024-11-11
  • python 多線程將大文件分開下載后在合并的實例

    python 多線程將大文件分開下載后在合并的實例

    今天小編就為大家分享一篇python 多線程將大文件分開下載后在合并的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11

最新評論