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

TensorFlow 模型載入方法匯總(小結(jié))

 更新時間:2018年06月19日 09:18:23   作者:疊加態(tài)的貓  
這篇文章主要介紹了TensorFlow 模型載入方法匯總(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、TensorFlow常規(guī)模型加載方法

保存模型

tf.train.Saver()類,.save(sess, ckpt文件目錄)方法

參數(shù)名稱 功能說明 默認(rèn)值
var_list Saver中存儲變量集合 全局變量集合
reshape 加載時是否恢復(fù)變量形狀 True
sharded 是否將變量輪循放在所有設(shè)備上 True
max_to_keep 保留最近檢查點個數(shù) 5
restore_sequentially 是否按順序恢復(fù)變量,模型較大時順序恢復(fù)內(nèi)存消耗小 True

var_list是字典形式{變量名字符串: 變量符號},相對應(yīng)的restore也根據(jù)同樣形式的字典將ckpt中的字符串對應(yīng)的變量加載給程序中的符號。

如果Saver給定了字典作為加載方式,則按照字典來,如:saver = tf.train.Saver({"v/ExponentialMovingAverage":v}),否則每個變量尋找自己的name屬性在ckpt中的對應(yīng)值進(jìn)行加載。

加載模型

當(dāng)我們基于checkpoint文件(ckpt)加載參數(shù)時,實際上我們使用Saver.restore取代了initializer的初始化

checkpoint文件會記錄保存信息,通過它可以定位最新保存的模型:

ckpt = tf.train.get_checkpoint_state('./model/')
print(ckpt.model_checkpoint_path)

 

.meta文件保存了當(dāng)前圖結(jié)構(gòu)

.index文件保存了當(dāng)前參數(shù)名

.data文件保存了當(dāng)前參數(shù)值

tf.train.import_meta_graph函數(shù)給出model.ckpt-n.meta的路徑后會加載圖結(jié)構(gòu),并返回saver對象

ckpt = tf.train.get_checkpoint_state('./model/')

tf.train.Saver函數(shù)會返回加載默認(rèn)圖的saver對象,saver對象初始化時可以指定變量映射方式,根據(jù)名字映射變量(『TensorFlow』滑動平均)

saver = tf.train.Saver({"v/ExponentialMovingAverage":v}) 

saver.restore函數(shù)給出model.ckpt-n的路徑后會自動尋找參數(shù)名-值文件進(jìn)行加載

saver.restore(sess,'./model/model.ckpt-0')
saver.restore(sess,ckpt.model_checkpoint_path)

1.不加載圖結(jié)構(gòu),只加載參數(shù)

由于實際上我們參數(shù)保存的都是Variable變量的值,所以其他的參數(shù)值(例如batch_size)等,我們在restore時可能希望修改,但是圖結(jié)構(gòu)在train時一般就已經(jīng)確定了,所以我們可以使用tf.Graph().as_default()新建一個默認(rèn)圖(建議使用上下文環(huán)境),利用這個新圖修改和變量無關(guān)的參值大小,從而達(dá)到目的。

'''
使用原網(wǎng)絡(luò)保存的模型加載到自己重新定義的圖上
可以使用python變量名加載模型,也可以使用節(jié)點名
'''
import AlexNet as Net
import AlexNet_train as train
import random
import tensorflow as tf
 
IMAGE_PATH = './flower_photos/daisy/5673728_71b8cb57eb.jpg'
 
with tf.Graph().as_default() as g:
 
 x = tf.placeholder(tf.float32, [1, train.INPUT_SIZE[0], train.INPUT_SIZE[1], 3])
 y = Net.inference_1(x, N_CLASS=5, train=False)
 
 with tf.Session() as sess:
  # 程序前面得有 Variable 供 save or restore 才不報錯
  # 否則會提示沒有可保存的變量
  saver = tf.train.Saver()
 
  ckpt = tf.train.get_checkpoint_state('./model/')
  img_raw = tf.gfile.FastGFile(IMAGE_PATH, 'rb').read()
  img = sess.run(tf.expand_dims(tf.image.resize_images(
   tf.image.decode_jpeg(img_raw),[224,224],method=random.randint(0,3)),0))
 
  if ckpt and ckpt.model_checkpoint_path:
   print(ckpt.model_checkpoint_path)
   saver.restore(sess,'./model/model.ckpt-0')
   global_step = ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1]
   res = sess.run(y, feed_dict={x: img})
   print(global_step,sess.run(tf.argmax(res,1)))

2.加載圖結(jié)構(gòu)和參數(shù)

'''
直接使用使用保存好的圖
無需加載python定義的結(jié)構(gòu),直接使用節(jié)點名稱加載模型
由于節(jié)點形狀已經(jīng)定下來了,所以有不便之處,placeholder定義batch后單張傳會報錯
現(xiàn)階段不推薦使用,以后如果理解深入了可能會找到使用方法
'''
import AlexNet_train as train
import random
import tensorflow as tf
 
IMAGE_PATH = './flower_photos/daisy/5673728_71b8cb57eb.jpg'
 
 
ckpt = tf.train.get_checkpoint_state('./model/')       # 通過檢查點文件鎖定最新的模型
saver = tf.train.import_meta_graph(ckpt.model_checkpoint_path +'.meta') # 載入圖結(jié)構(gòu),保存在.meta文件中
 
with tf.Session() as sess:
 saver.restore(sess,ckpt.model_checkpoint_path)      # 載入?yún)?shù),參數(shù)保存在兩個文件中,不過restore會自己尋找
 
 img_raw = tf.gfile.FastGFile(IMAGE_PATH, 'rb').read()
 img = sess.run(tf.image.resize_images(
  tf.image.decode_jpeg(img_raw), train.INPUT_SIZE, method=random.randint(0, 3)))
 imgs = []
 for i in range(128):
  imgs.append(img)
 print(sess.run(tf.get_default_graph().get_tensor_by_name('fc3:0'),feed_dict={'Placeholder:0': imgs}))
 
 '''
 img = sess.run(tf.expand_dims(tf.image.resize_images(
  tf.image.decode_jpeg(img_raw), train.INPUT_SIZE, method=random.randint(0, 3)), 0))
 print(img)
 imgs = []
 for i in range(128):
  imgs.append(img)
 print(sess.run(tf.get_default_graph().get_tensor_by_name('conv1:0'),
     feed_dict={'Placeholder:0':img}))

注意,在所有兩種方式中都可以通過調(diào)用節(jié)點名稱使用節(jié)點輸出張量,節(jié)點.name屬性返回節(jié)點名稱。

3.簡化版本

# 連同圖結(jié)構(gòu)一同加載
ckpt = tf.train.get_checkpoint_state('./model/')
saver = tf.train.import_meta_graph(ckpt.model_checkpoint_path +'.meta')
with tf.Session() as sess:
 saver.restore(sess,ckpt.model_checkpoint_path)
    
# 只加載數(shù)據(jù),不加載圖結(jié)構(gòu),可以在新圖中改變batch_size等的值
# 不過需要注意,Saver對象實例化之前需要定義好新的圖結(jié)構(gòu),否則會報錯
saver = tf.train.Saver()
with tf.Session() as sess:
 ckpt = tf.train.get_checkpoint_state('./model/')
 saver.restore(sess,ckpt.model_checkpoint_path)

二、TensorFlow二進(jìn)制模型加載方法

這種加載方法一般是對應(yīng)網(wǎng)上各大公司已經(jīng)訓(xùn)練好的網(wǎng)絡(luò)模型進(jìn)行修改的工作

# 新建空白圖
self.graph = tf.Graph()
# 空白圖列為默認(rèn)圖
with self.graph.as_default():
 # 二進(jìn)制讀取模型文件
 with tf.gfile.FastGFile(os.path.join(model_dir,model_name),'rb') as f:
  # 新建GraphDef文件,用于臨時載入模型中的圖
  graph_def = tf.GraphDef()
  # GraphDef加載模型中的圖
  graph_def.ParseFromString(f.read())
  # 在空白圖中加載GraphDef中的圖
  tf.import_graph_def(graph_def,name='')
  # 在圖中獲取張量需要使用graph.get_tensor_by_name加張量名
  # 這里的張量可以直接用于session的run方法求值了
  # 補(bǔ)充一個基礎(chǔ)知識,形如'conv1'是節(jié)點名稱,而'conv1:0'是張量名稱,表示節(jié)點的第一個輸出張量
  self.input_tensor = self.graph.get_tensor_by_name(self.input_tensor_name)
  self.layer_tensors = [self.graph.get_tensor_by_name(name + ':0') for name in self.layer_operation_names]

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python爬蟲:通過關(guān)鍵字爬取百度圖片

    Python爬蟲:通過關(guān)鍵字爬取百度圖片

    本文主要介紹了Python爬蟲:通過關(guān)鍵字爬取百度圖片的方法。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Pygame實戰(zhàn)練習(xí)之保護(hù)單身狗游戲

    Pygame實戰(zhàn)練習(xí)之保護(hù)單身狗游戲

    下面這篇文章主要給大家介紹了關(guān)于如何利用python寫一個簡單的由經(jīng)典躲避類益智小游戲修改的保護(hù)單身狗游戲的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • F.conv2d?pytorch卷積計算方式

    F.conv2d?pytorch卷積計算方式

    這篇文章主要介紹了F.conv2d?pytorch卷積計算方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 使用FastCGI部署Python的Django應(yīng)用的教程

    使用FastCGI部署Python的Django應(yīng)用的教程

    這篇文章主要介紹了使用FastCGI部署Python的Django應(yīng)用的教程,FastCGI也是被最廣泛的應(yīng)用于Python框架和服務(wù)器連接的模塊,需要的朋友可以參考下
    2015-07-07
  • Django Admin 管理工具的實現(xiàn)

    Django Admin 管理工具的實現(xiàn)

    這篇文章主要介紹了Django Admin 管理工具的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • python實戰(zhàn)之德州撲克第二步-判斷牌型

    python實戰(zhàn)之德州撲克第二步-判斷牌型

    這篇文章主要介紹了python實戰(zhàn)之德州撲克第二步-判斷牌型,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • python實現(xiàn)mean-shift聚類算法

    python實現(xiàn)mean-shift聚類算法

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)mean-shift聚類算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • python檢測IP地址變化并觸發(fā)事件

    python檢測IP地址變化并觸發(fā)事件

    這篇文章主要為大家詳細(xì)介紹了python檢測IP地址變化并觸發(fā)事件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • python 實現(xiàn)提取PPT中所有的文字

    python 實現(xiàn)提取PPT中所有的文字

    這篇文章主要介紹了python 實現(xiàn)提取PPT中所有的文字,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • django使用F方法更新一個對象多個對象字段的實現(xiàn)

    django使用F方法更新一個對象多個對象字段的實現(xiàn)

    這篇文章主要介紹了django使用F方法更新一個對象多個對象字段的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03

最新評論

手游| 林周县| 谢通门县| 新巴尔虎左旗| 囊谦县| 诸暨市| 安福县| 宜黄县| 浮梁县| 怀化市| 宁城县| 呈贡县| 双城市| 夏河县| 汽车| 临猗县| 新化县| 乌兰浩特市| 甘洛县| 宁河县| 贵南县| 红河县| 余庆县| 华容县| 澳门| 汤原县| 焦作市| 邹平县| 临洮县| 南靖县| 石渠县| 尉氏县| 阳高县| 石门县| 台东市| 孝昌县| 毕节市| 深泽县| 厦门市| 金堂县| 闵行区|