詳解tensorflow實(shí)現(xiàn)遷移學(xué)習(xí)實(shí)例
本文主要是總結(jié)利用tensorflow實(shí)現(xiàn)遷移學(xué)習(xí)的基本步驟。
所謂遷移學(xué)習(xí),就是將上一個(gè)問題上訓(xùn)練好的模型通過簡(jiǎn)單的調(diào)整使其適用于一個(gè)新的問題。比如說,我們可以保留訓(xùn)練好的Inception-v3模型中所有的參數(shù),只替換最后一層全連接層。在最后一層全連接層之前的網(wǎng)絡(luò)稱之為瓶頸層(bottleneck)。
持久化
首先需要簡(jiǎn)單介紹下tensorflow中的持久化:在tensorflow中提供了一個(gè)非常簡(jiǎn)單的API來保存和還原一個(gè)神經(jīng)網(wǎng)絡(luò)模型,這個(gè)API就是tf.train.Saver類。當(dāng)采用該方法保存時(shí)會(huì)生成三個(gè)文件,一個(gè)文件是model.ckpt.meta,它保存了Tensorflow計(jì)算圖的結(jié)構(gòu);第二個(gè)文件是model.ckpt,它保存了程序中每一個(gè)變量的取值;最后一個(gè)文件是checkpoint文件,這個(gè)文件中保存了一個(gè)目錄下所有模型文件列表。
保存圖
init_op = tf.initialize_all_variables() with tf.Session() as sess: sess.run(init_op) saver.save(sess, "model.ckpt")
加載圖
saver = tf.train.import_meta_graph("model.ckpt.meta")
with tf.Session() as sess:
saver.restore(sess, "model.ckpt")
遷移學(xué)習(xí)
第一步: 讀取加載已經(jīng)訓(xùn)練好的模型
在inception-v3模型代表瓶頸層結(jié)果的張量名稱是'pool3/_reshape:0',圖像輸入張量對(duì)應(yīng)的名稱'DecodeJpeg/contents:0'
BOTTLENECK_TENSOR_NAME = 'pool_3/_reshape:0'
JPEG_DATA_TENSOR_NAME = 'DecodeJpeg/contents:0'
#讀取已經(jīng)訓(xùn)練好的模型
with gfile.FastGFile(os.path.join(MODEL_DIR, MODEL_FILE), 'rb') as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
bottleneck_tensor, jpeg_data_tensor = tf.import_graph_def(graph_def, return_elements=[BOTTLENECK_TENSOR_NAME, JPEG_DATA_TENSOR_NAME])
第二步:利用讀取的模型,定義新的神經(jīng)網(wǎng)絡(luò)輸入,這個(gè)輸入就是新的圖片經(jīng)過Inception-v3模型前向傳播到達(dá)瓶頸層的取值,是一種特征提取過程。
def run_bottlenect_on_images(sess, image_data, image_data_tensor, bottlenect_tensor):
bottlenect_values = sess.run(bottlenect_tensor, {image_data_tensor: image_data})
# 經(jīng)過卷積網(wǎng)絡(luò)處理后的是一個(gè)思維數(shù)組,壓縮成一個(gè)特征,一維向量輸出
bottlenect_values = np.squeeze(bottlenect_values)
return bottlenect_values
該過程實(shí)際上利用獲取的tensor計(jì)算圖片的特征向量,完成特征提取的過程。
第三步:利用獲取的圖像的特征向量完成接下來的任務(wù)(比如分類)
以上是僅關(guān)鍵代碼。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python 中的Selenium異常處理實(shí)例代碼
本文通過實(shí)例代碼給大家介紹了Python 中的Selenium異常處理的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2018-05-05
python中readline判斷文件讀取結(jié)束的方法
這篇文章主要介紹了python中readline判斷文件讀取結(jié)束的方法,實(shí)例形式詳細(xì)分析了Python中readline的用法,需要的朋友可以參考下2014-11-11
python re的findall和finditer的區(qū)別詳解
這篇文章主要介紹了python re的findall和finditer的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Python根據(jù)區(qū)號(hào)生成手機(jī)號(hào)碼的方法
這篇文章主要介紹了Python根據(jù)區(qū)號(hào)生成手機(jī)號(hào)碼的方法,涉及Python隨機(jī)數(shù)與字符串的相關(guān)操作技巧,需要的朋友可以參考下2015-07-07
Python的Flask框架開發(fā)驗(yàn)證碼登錄的實(shí)現(xiàn)
在本文我們介紹了如何使用Python的Flask框架開發(fā)一個(gè)簡(jiǎn)單的驗(yàn)證碼登錄功能,將涵蓋生成驗(yàn)證碼、處理用戶輸入、驗(yàn)證驗(yàn)證碼以及實(shí)現(xiàn)安全的用戶認(rèn)證等方面,感興趣的可以了解一下2023-11-11
Python實(shí)現(xiàn)模擬登錄網(wǎng)易郵箱的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)模擬登錄網(wǎng)易郵箱的方法,結(jié)合實(shí)例形式分析了Python基于urllib2及cookielib模塊的http請(qǐng)求、數(shù)據(jù)傳輸及交互相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
在Python中測(cè)試訪問同一數(shù)據(jù)的競(jìng)爭(zhēng)條件的方法
這篇文章主要介紹了在Python中測(cè)試訪問同一數(shù)據(jù)的競(jìng)爭(zhēng)條件的方法,探究多線程或多進(jìn)程情況下優(yōu)先訪問權(quán)的問題,需要的朋友可以參考下2015-04-04
python fabric實(shí)現(xiàn)遠(yuǎn)程部署
這篇文章主要為大家詳細(xì)介紹了 python fabric實(shí)現(xiàn)遠(yuǎn)程部署,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
利用OpenCV實(shí)現(xiàn)質(zhì)心跟蹤算法
質(zhì)心跟蹤算法不是正統(tǒng)的目標(biāo)跟蹤,而是在多目標(biāo)跟蹤中結(jié)合目標(biāo)檢測(cè)算法不同幀之間的相同目標(biāo)做一個(gè)link。本文將利用OpenCV實(shí)現(xiàn)質(zhì)心跟蹤算法,感興趣的可以試一試2022-01-01

