Keras筆記03—利用預訓練模型進行特徵提取

2022-01-04 霧都往事zxc

     利用預訓練模型可以有效的提取圖片的特徵,提取出特徵後,可以利用除了神經網絡以外的別的方法,對特徵數據集進行分析。顯然,如果我們擁有的數據集比較少的時候,不足以用數據集訓練一個龐大的神經網絡,但是可以利用提取特徵的方法,獲得特徵數據,再利用支持向量機等機器學習方法,或者PCA,PLS-DA等方法對數據集進行分析。

     提取特徵不需要對預訓練好的模型進行fine-tuning,權重不需要改變,所以相對來說比較簡單。只是需要下載和導入模型。Keras 的應用模塊(keras.applications)提供了帶有預訓練權值的深度學習模型,這些模型可以用來進行預測、特徵提取和微調(fine-tuning)。keras中的接下來以利用VGG16為例子,進行特徵提取說明。

 

1. 提取feature的基本步驟

from keras.applications.vgg16 import VGG16from keras.preprocessing import imagefrom keras.applications.vgg16 import preprocess_input, decode_predictionsfrom keras.utils.vis_utils import plot_modelimport matplotlib.pyplot as plt# 初始化一個預訓練模型時,會自動下載權重到 ~/.keras/models/ 目錄下。weights='imagenet'表示運用模型預訓練的權重,include_top=False表示除去全連接層

model = VGG16(weights='imagenet', include_top=False)

model.summary()

img_path = 'cat1.jpg'

img = image.load_img(img_path, target_size=(224, 224))

x = image.img_to_array(img)

x = np.expand_dims(x, axis=0)

x = preprocess_input(x)

features = model.predict(x)

features.shape

(1, 7, 7, 512)


#把多維數組拉平成二維數組,這樣以後可以把每個圖片的特徵都存到一起,供後續分析使用

features.reshape(1,-1).shape

(1, 25088)



2. 提取任意一層輸出的基本步驟

from keras.applications.vgg16 import VGG16from keras.preprocessing import imagefrom keras.applications.vgg16 import preprocess_input, decode_predictionsfrom keras.utils.vis_utils import plot_modelimport matplotlib.pyplot as plt

from keras.models import Model

base_model = VGG16(weights='imagenet', include_top=False)

#指定提取'block2_conv2'層的輸出。可以根據實際情況隨意改變

model = Model(inputs=base_model.input, outputs = base_model.get_layer('block2_conv2').output)

img_path = 'cat1.jpg'

img = image.load_img(img_path, target_size=(224, 224))

x = image.img_to_array(img)

x = np.expand_dims(x, axis=0)

x = preprocess_input(x)

block2_conv2= model.predict(x)



相關焦點

  • 自製人臉數據,利用keras庫訓練人臉識別模型
    日本程式設計師提供的源碼利用了keras這個深度學習庫來訓練自己的人臉識別模型。keras是一個上層的神經網絡學習庫,純python編寫,被集成進了Tensorflow和Theano這樣的深度學習框架。
  • 超讚,以QA形式對NLP預訓練模型進行的全面總結!
    2020年3月18日,邱錫鵬老師發表了關於NLP預訓練模型的綜述《Pre-trained Models for Natural Language Processing: A Survey》,這是一篇全面的綜述,系統地對PTMs進行了歸納分類。本文以此篇綜述論文為主要參考,通過借鑑不同的歸納方法進行總結,以QA形式對PTMs進行全面總結歸納。
  • 帶你少走彎路:強烈推薦的Keras快速入門資料和翻譯(可下載)
    Keras API示例1.0:使用圖像增強來進行深度學習1.1:如何使用Keras函數式API進行深度學習1.2:從零開始構建VGG網絡來學習Keras1.3:使用預訓練的模型來分類照片中的物體1.4:使用圖像增強來訓練小數據集1.5:使用預先訓練的卷積網絡模型1.6:卷積網絡模型學習到什麼的可視化
  • 使用Keras上的分段模型和實施庫進行道路檢測
    與segmentation_models庫一起,它為Unet和其他類似unet的架構提供了數十個預訓練。有關完整代碼,請訪問Github。它背後的核心思想只是幾個卷積塊,它們提取深度和不同類型的圖像特徵,接著是所謂的反卷積或上採樣塊,它們恢復了輸入圖像的初始形狀。除了在每個卷積層之後,還有一些跳過連接,這有助於網絡記住初始圖像並幫助防止漸變漸變。有關更多詳細信息,請閱讀arxiv文章。
  • 預訓練模型綜述
    ELMo 從大規模的無監督的語料中,預訓練一個雙向的 LSTM 語言模型,它分為兩個階段,第一個階段在大規模語料庫上利用語言模型進行預訓練,第二個階段是在做下遊任務時,從預訓練網絡中提取對應單詞的網絡各層的詞嵌入作為新特徵補充到下遊任務中,它是一種典型的基於特徵融合的預訓練模型,它的模型結構如圖 3.1 所示。
  • 按照時間線幫你梳理10種預訓練模型
    ELMO  2018.03    華盛頓大學   GPT     2018.06    OpenAI  BERT   2018.10    Google XLNet  2019.6    CMU+googleERNIE    2019.4     百度  BERT-wwm  2019.6   哈工大+訊飛  RoBERTa
  • 預訓練模型探索1
    本系列將對預訓練語言模型進行初步探索,本部分為第一部分,對預訓練模型的優點以及發展歷史進行簡要介紹。引言回顧近年來基於深度學習的NLP技術的重大事件,就不得不提到由ELMo/GPT/BERT帶來的預訓練模型熱潮。
  • 海量中文語料上預訓練ALBERT模型:參數更少,效果更好
    BERT的改進版,與最近其他State of the art的模型不同的是,這次是預訓練小模型,效果更好、參數更少。預訓練小模型也能拿下13項NLP任務,ALBERT三大改造登頂GLUE基準它對BERT進行了三個改造:1)詞嵌入向量參數的因式分解 Factorized embedding parameterization O(V * H) to O(V * E + E * H) 如以ALBert_xxlarge為例,V=30000, H
  • 【NLP】預訓練模型綜述
    ELMo 從大規模的無監督的語料中,預訓練一個雙向的 LSTM 語言模型,它分為兩個階段,第一個階段在大規模語料庫上利用語言模型進行預訓練,第二個階段是在做下遊任務時,從預訓練網絡中提取對應單詞的網絡各層的詞嵌入作為新特徵補充到下遊任務中,它是一種典型的基於特徵融合的預訓練模型,它的模型結構如圖 3.1 所示。
  • 機器學習|7種經典預訓練模型原理解析
    目前無論在CV領域還是NLP領域,預訓練都是一個很普遍和普適的方法。我們都知道深度學習的模型越龐大,模型參數越多,為了避免過擬合就需要相應大規模的數據集,但對於很多任務而言,樣本標註的成本昂貴。相反,大規模無標籤資料庫相對容易建立,為了充分利用這些無標記數據,我們可以先使用它們在其他一些任務上學習一個好的特徵表示,再用於訓練目標任務。
  • 復旦大學邱錫鵬教授:NLP預訓練模型綜述
    為了利用大量的未標註文本數據,我們可以先從其中學習一個好的表示,再將這些表示用在別的任務中。這一通過 PTMs 從未標註大規模數據集中提取表示的預訓練過程在很多 NLP 任務中都取得了很好的表現。student 模型,一些利用知識蒸餾的 PTMs 見表 3。
  • Keras使用總結(1)—Keras概述與常見問題整理
    傳統機器學習:利用特徵工程(feature enginerring),人為對數據進行提煉清洗深度學習:利用表示學習(representation learning),機器學習模型自身對數據進行提煉sklearn更傾向於使用者可以自行對數據進行處理,比如選擇特徵,壓縮維度,轉換格式,是傳統機器學庫,而以tf為代表的深度學習庫會自動從數據中抽取有效特徵,而不需要人為的來做這件事情
  • Colab超火的Keras/TPU深度學習實戰,會點Python就能看懂的課程
    在Keras中利用遷移學習本次實驗在keras中實現遷移學習,將強大的預訓練模型應用於我們的數據集,不用費力重新訓練模型。此外,本實驗包含有關神經網絡的必要理論解釋。神經網絡分類器是由幾個層的神經元組成。對於圖像分類,這些可以是Dense層,或者更常見的是卷積層。它們通常通過relu激活函數激活。最後一層使用與類相同數量的神經元,並使用softmax激活。
  • Transformer研究井噴式湧現;最大中文多模態預訓練數據集
    當標籤樣本有限時,自監督學習( SSL)能夠成為利用大量標籤樣本的新範式。SSL 在自然語言和圖像學習任務上實現了非常不錯的性能。最近出現了一種研究趨勢,將這一成功擴展至了使用圖神經網絡(GNN)的圖數據上。在本文中,來自德州農工大學和亞馬遜的幾位研究者對使用 SSL 來訓練 GNN 的不同方法進行了回顧。具體而言,他們將 SSL 方法分類為對比和預測模型。
  • 遷移學習實戰 | 快速訓練殘差網絡 ResNet-101,完成圖像分類與預測,精度高達 98%!
    圖中,Conv1、Conv2…ConvN指的就是N個卷積層,用來提取圖像不同層次的特徵。其中,淺層的Conv1、Conv2等來提取圖像的淺層特徵,比如:角點、紋理、明亮等;深層的ConvN-1、ConvN等來提取的是圖像更為抽象的特徵,比如:眼睛、鼻子、嘴巴、肢體等。而Dense層指的是全連接層,用來對已學得的特徵進行組合,從而學會了如何分辨人、汽車、貓、狗等。
  • 復旦邱錫鵬教授:2020最新NLP預訓練模型綜述
    如:知識增強預訓練,多語言預訓練,多模態預訓練和模型壓縮等3、如何將PTMs學到的知識遷移到下遊的任務中。4、收集了目前關於PTMs的學習資料。5、指明PTMs未來的研究方向,如:局限、挑戰、建議。由於篇幅原因,本文主要針對前面兩點進行梳理,即「目前主流的預訓練模型」和「預訓練模型的分類體系」。
  • PTMs:NLP預訓練模型
    本文以此篇綜述論文為主要參考,通過借鑑不同的歸納方法進行總結,同時也整合了專欄之前已經介紹過的《nlp中的詞向量對比》和《nlp中的預訓練語言模型總結》兩篇文章,以QA形式對PTMs進行全面總結歸納。獲取總結圖片下載以及單模型精讀請到 github:NLP預訓練模型的全面總結,希望為大家的學習工作提供一些幫助。
  • keras中文-快速開始Sequential模型
    和Merge組合生成的複雜模型,可以參考泛型模型API編譯在訓練模型之前,我們需要通過compile來對學習過程進行配置。訓練模型一般使用fit函數,該函數的詳情見這裡。下面是一些例子。 使用帶有門限的遞歸單元進行圖像描述:(單詞級別嵌入,描述語句最多16個單詞)注意,要使該網絡良好工作需要更大規模的卷積神經網絡並以預訓練權重初始化,此處僅為結構示例。
  • 【論文解讀】MacBERT: 中文自然語言預訓練模型
    在本文中,我們的目標是重新審視中文預訓練語言模型,以檢驗其在非英語語言中的有效性,並向社區發布中文預訓練語言模型系列。我們還提出了一個簡單但有效的模型,稱為MacBERT,該模型在多個方面對RoBERTa進行了改進,尤其是採用MLM作為校正(Mac)的masked策略。我們對8個中文NLP任務進行了廣泛的實驗,以重新審視現有的預訓練語言模型以及提議的MacBERT。
  • 防止神經網絡模型過擬合的6種方法及keras代碼實現
    過擬合問題由於模型過於複雜,學習能力過強,而用於訓練的數據相對於複雜模型來說比較簡單,所有模型會去學習數據中隱含的噪聲,導致模型學不到真正數據集的分布,如下圖所示,紅色線就是由於模型過分的擬合了訓練數據集,導致泛化能力過差。而藍色線才是真正的數據集的分布。同時,在很多問題上,我們無法窮盡所有狀態,不可能將所有情況都包含在訓練集上。