詳解tensorflow實(shí)現(xiàn)遷移學(xué)習(xí)實(shí)例
本文主要是總結(jié)利用tensorflow實(shí)現(xiàn)遷移學(xué)習(xí)的基本步驟。
所謂遷移學(xué)習(xí),就是將上一個問題上訓(xùn)練好的模型通過簡單的調(diào)整使其適用于一個新的問題。比如說,我們可以保留訓(xùn)練好的Inception-v3模型中所有的參數(shù),只替換最后一層全連接層。在最后一層全連接層之前的網(wǎng)絡(luò)稱之為瓶頸層(bottleneck)。
持久化
首先需要簡單介紹下tensorflow中的持久化:在tensorflow中提供了一個非常簡單的API來保存和還原一個神經(jīng)網(wǎng)絡(luò)模型,這個API就是tf.train.Saver類。當(dāng)采用該方法保存時會生成三個文件,一個文件是model.ckpt.meta,它保存了Tensorflow計(jì)算圖的結(jié)構(gòu);第二個文件是model.ckpt,它保存了程序中每一個變量的取值;最后一個文件是checkpoint文件,這個文件中保存了一個目錄下所有模型文件列表。
保存圖
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',圖像輸入張量對應(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ò)輸入,這個輸入就是新的圖片經(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ò)處理后的是一個思維數(shù)組,壓縮成一個特征,一維向量輸出 bottlenect_values = np.squeeze(bottlenect_values) return bottlenect_values
該過程實(shí)際上利用獲取的tensor計(jì)算圖片的特征向量,完成特征提取的過程。
第三步:利用獲取的圖像的特征向量完成接下來的任務(wù)(比如分類)
以上是僅關(guān)鍵代碼。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解如何使用Python實(shí)現(xiàn)復(fù)制粘貼的功能
pandas?里面有一個?pd.read_clipboard?函數(shù),可以根據(jù)你復(fù)制的內(nèi)容生成DataFrame。本文就利用這個函數(shù)實(shí)現(xiàn)復(fù)制粘貼的功能,感興趣的可以了解一下2023-01-01python tkinter中的錨點(diǎn)(anchor)問題及處理
這篇文章主要介紹了python tkinter中的錨點(diǎn)(anchor)問題及處理方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06tf.nn.conv2d與tf.layers.conv2d的區(qū)別及說明
這篇文章主要介紹了tf.nn.conv2d與tf.layers.conv2d的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02如何將Yolov5的detect.py修改為可以直接調(diào)用的函數(shù)詳解
YOLOv4還沒有退熱,YOLOv5已經(jīng)發(fā)布,下面這篇文章主要給大家介紹了關(guān)于如何將Yolov5的detect.py修改為可以直接調(diào)用的函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04python設(shè)置windows桌面壁紙的實(shí)現(xiàn)代碼
每天換一個壁紙,每天好心情。喜歡的朋友可以參考下2013-01-01