tensorflow模型保存、加載之變量重命名實(shí)例
話(huà)不多說(shuō),干就完了。
變量重命名的用處?
簡(jiǎn)單定義:簡(jiǎn)單來(lái)說(shuō)就是將模型A中的參數(shù)parameter_A賦給模型B中的parameter_B
使用場(chǎng)景:當(dāng)需要使用已經(jīng)訓(xùn)練好的模型參數(shù),尤其是使用別人訓(xùn)練好的模型參數(shù)時(shí),往往別人模型中的參數(shù)命名方式與自己當(dāng)前的命名方式不同,所以在加載模型參數(shù)時(shí)需要對(duì)參數(shù)進(jìn)行重命名,使得代碼更簡(jiǎn)潔易懂。
實(shí)現(xiàn)方法:
1)、模型保存
import os
import tensorflow as tf
weights = tf.Variable(initial_value=tf.truncated_normal(shape=[1024, 2],
mean=0.0,
stddev=0.1),
dtype=tf.float32,
name="weights")
biases = tf.Variable(initial_value=tf.zeros(shape=[2]),
dtype=tf.float32,
name="biases")
weights_2 = tf.Variable(initial_value=weights.initialized_value(),
dtype=tf.float32,
name="weights_2")
# saver checkpoint
if os.path.exists("checkpoints") is False:
os.makedirs("checkpoints")
saver = tf.train.Saver()
with tf.Session() as sess:
init_op = [tf.global_variables_initializer()]
sess.run(init_op)
saver.save(sess=sess, save_path="checkpoints/variable.ckpt")
2)、模型加載(變量名稱(chēng)保持不變)
import tensorflow as tf
from matplotlib import pyplot as plt
import os
current_path = os.path.dirname(os.path.abspath(__file__))
def restore_variable(sess):
# need not initilize variable, but need to define the same variable like checkpoint
weights = tf.Variable(initial_value=tf.truncated_normal(shape=[1024, 2],
mean=0.0,
stddev=0.1),
dtype=tf.float32,
name="weights")
biases = tf.Variable(initial_value=tf.zeros(shape=[2]),
dtype=tf.float32,
name="biases")
weights_2 = tf.Variable(initial_value=weights.initialized_value(),
dtype=tf.float32,
name="weights_2")
saver = tf.train.Saver()
ckpt_path = os.path.join(current_path, "checkpoints", "variable.ckpt")
saver.restore(sess=sess, save_path=ckpt_path)
weights_val, weights_2_val = sess.run(
[
tf.reshape(weights, shape=[2048]),
tf.reshape(weights_2, shape=[2048])
]
)
plt.subplot(1, 2, 1)
plt.scatter([i for i in range(len(weights_val))], weights_val)
plt.subplot(1, 2, 2)
plt.scatter([i for i in range(len(weights_2_val))], weights_2_val)
plt.show()
if __name__ == '__main__':
with tf.Session() as sess:
restore_variable(sess)
3)、模型加載(變量重命名)
import tensorflow as tf
from matplotlib import pyplot as plt
import os
current_path = os.path.dirname(os.path.abspath(__file__))
def restore_variable_renamed(sess):
conv1_w = tf.Variable(initial_value=tf.truncated_normal(shape=[1024, 2],
mean=0.0,
stddev=0.1),
dtype=tf.float32,
name="conv1_w")
conv1_b = tf.Variable(initial_value=tf.zeros(shape=[2]),
dtype=tf.float32,
name="conv1_b")
conv2_w = tf.Variable(initial_value=conv1_w.initialized_value(),
dtype=tf.float32,
name="conv2_w")
# variable named 'weights' in ckpt assigned to current variable conv1_w
# variable named 'biases' in ckpt assigned to current variable conv1_b
# variable named 'weights_2' in ckpt assigned to current variable conv2_w
saver = tf.train.Saver({
"weights": conv1_w,
"biases": conv1_b,
"weights_2": conv2_w
})
ckpt_path = os.path.join(current_path, "checkpoints", "variable.ckpt")
saver.restore(sess=sess, save_path=ckpt_path)
conv1_w__val, conv2_w__val = sess.run(
[
tf.reshape(conv1_w, shape=[2048]),
tf.reshape(conv2_w, shape=[2048])
]
)
plt.subplot(1, 2, 1)
plt.scatter([i for i in range(len(conv1_w__val))], conv1_w__val)
plt.subplot(1, 2, 2)
plt.scatter([i for i in range(len(conv2_w__val))], conv2_w__val)
plt.show()
if __name__ == '__main__':
with tf.Session() as sess:
restore_variable_renamed(sess)
總結(jié):
# 之前模型中叫 'weights'的變量賦值給當(dāng)前的conv1_w變量
# 之前模型中叫 'biases' 的變量賦值給當(dāng)前的conv1_b變量
# 之前模型中叫 'weights_2'的變量賦值給當(dāng)前的conv2_w變量
saver = tf.train.Saver({
"weights": conv1_w,
"biases": conv1_b,
"weights_2": conv2_w
})
以上這篇tensorflow模型保存、加載之變量重命名實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于進(jìn)程內(nèi)通訊的python聊天室實(shí)現(xiàn)方法
這篇文章主要介紹了基于進(jìn)程內(nèi)通訊的python聊天室實(shí)現(xiàn)方法,實(shí)例分析了Python聊天室的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-06-06
python猜數(shù)字小游戲?qū)崿F(xiàn)代碼
大家好,本篇文章主要講的是python猜數(shù)字小游戲?qū)崿F(xiàn)代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下,方便下次瀏覽2022-01-01
基于pytorch實(shí)現(xiàn)對(duì)圖片進(jìn)行數(shù)據(jù)增強(qiáng)
圖像數(shù)據(jù)增強(qiáng)是一種在訓(xùn)練機(jī)器學(xué)習(xí)和深度學(xué)習(xí)模型時(shí)常用的策略,尤其是在計(jì)算機(jī)視覺(jué)領(lǐng)域,具體而言,它通過(guò)創(chuàng)建和原始圖像稍有不同的新圖像來(lái)擴(kuò)大訓(xùn)練集,本文給大家介紹了如何基于pytorch實(shí)現(xiàn)對(duì)圖片進(jìn)行數(shù)據(jù)增強(qiáng),需要的朋友可以參考下2024-01-01
Blueprint實(shí)現(xiàn)路由分組及Flask中session的使用詳解
這篇文章主要為大家介紹了Blueprint實(shí)現(xiàn)路由分組及Flask中session的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
Python使用xpath對(duì)解析內(nèi)容進(jìn)行數(shù)據(jù)提取
XPath 使用路徑表達(dá)式來(lái)選取HTML/ XML 文檔中的節(jié)點(diǎn)或節(jié)點(diǎn)集,節(jié)點(diǎn)是通過(guò)沿著路徑 (path) 或者步 (steps) 來(lái)選取的,本文將給大家介紹Python使用xpath對(duì)解析內(nèi)容進(jìn)行數(shù)據(jù)提取的方法,需要的朋友可以參考下2024-05-05
PyQt4實(shí)現(xiàn)下拉菜單可供選擇并打印出來(lái)
這篇文章主要為大家詳細(xì)介紹了PyQt4實(shí)現(xiàn)下拉菜單可供選擇并打印出來(lái),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
Python實(shí)戰(zhàn)項(xiàng)目之MySQL tkinter pyinstaller實(shí)現(xiàn)學(xué)生管理系統(tǒng)
讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用MySQL、tkinter、 pyinstaller實(shí)現(xiàn)一個(gè)學(xué)生管理系統(tǒng),大家可以通過(guò)案例查缺補(bǔ)漏,提升水平2021-10-10

