深度學習5 使用預訓練模型(1)

2021-09-25 14:58:19 字數 1964 閱讀 9529

如果資料集太小的話不管怎麼去加工處理,總會出現過擬合問題,使得精度不會那麼的高,所以就要引入預訓練過的模型了,預訓練的模型通常是大數量的資料訓練過的,而且特點就在於挑選的預訓練模型是和現有問題有著相似性的。

這裡使用的是乙個簡單且老的模型vgg16,這個模型和我們之前使用的架構很相似。使用預訓練的網路有兩種方法,即特徵提取和微調模型。

首先,在之前的學習中,卷積神經網路包括兩個部分,第一部分由卷積層和池化層組成,第二部分是乙個展開的分類器,第一部分簡單把他叫做卷積基。後面的分類器是為了給訓練好的模型分類使用,它本身的泛用性不是那麼的強,這個簡單思考就會明白,所以通常使用卷積基來做重複使用。

還有就是問題的相似度。從邏輯上來看,層數越少,訓練的特徵就越簡單。所以相似性越高,已有模型可用的層就越多,如果新問題和已有模型的相似度不高,可以考慮少用幾層已有模型的結構。

現在可以看具體的實現過程了。

conv_base = vgg16(weights='imagenet',

include_top=false,

input_shape=(150, 150, 3))

匯入vgg16,設定卷積基相關引數,其中weights:none代表隨機初始化,即不載入預訓練權重。'imagenet』代表載入預訓練權重 ;include_top代表是否使用第二部分分類器,這裡不使用。因為是貓狗問題,自己加就行;最後就是輸入尺寸了。

用summary方法看一下網路的架構,發現很眼熟:

input_1 (inputlayer) (none, 150, 150, 3) 0

block1_conv1 (conv2d) (none, 150, 150, 64) 1792

block1_conv2 (conv2d) (none, 150, 150, 64) 36928

block1_pool (maxpooling2d) (none, 75, 75, 64) 0

block2_conv1 (conv2d) (none, 75, 75, 128) 73856

block2_conv2 (conv2d) (none, 75, 75, 128) 147584

block2_pool (maxpooling2d) (none, 37, 37, 128) 0

block3_conv1 (conv2d) (none, 37, 37, 256) 295168

block3_conv2 (conv2d) (none, 37, 37, 256) 590080

block3_conv3 (conv2d) (none, 37, 37, 256) 590080

block3_pool (maxpooling2d) (none, 18, 18, 256) 0

block4_conv1 (conv2d) (none, 18, 18, 512) 1180160

block4_conv2 (conv2d) (none, 18, 18, 512) 2359808

block4_conv3 (conv2d) (none, 18, 18, 512) 2359808

block4_pool (maxpooling2d) (none, 9, 9, 512) 0

block5_conv1 (conv2d) (none, 9, 9, 512) 2359808

block5_conv2 (conv2d) (none, 9, 9, 512) 2359808

block5_conv3 (conv2d) (none, 9, 9, 512) 2359808

total params: 14,714,688

trainable params: 14,714,688

non-trainable params: 0

最後的輸出為4,4,512,所以在這個基礎上加乙個密集鏈結分類器,就可以實現二分類的問題解決,但現在面臨的問題就是優化模型的問題。

這個模型無法使用資料增強,要使用的話必須在這個模型頂部加乙個dense層,這就會導致模型訓練的計算消耗大大增加了。後面會分別分析不使用和使用資料增強的兩種方法。

BERT 中文預訓練模型使用

只要是從事文字處理相關工作的人應該都知道 google 最新發布的 bert 模型,該模型屬於是詞向量的預訓練模型,一經提出便橫掃各大 nlp 任務,最近 google 公司如約推出了中文詞向量的預訓練模型,不得不說這是一件非常有良心的事情,在此膜拜和感謝 google 公司。那麼如何使用 bert...

預訓練語言模型學習筆記

bert解決長序列問題 架構設計 為了能讓機器可以讀非常長的序列,transformer xl 可以讓機器讀跨越片段的內容。為了讓自注意力的計算複雜度變小,從 o t 變成了 o tlogt 甚至更低,reformer 使用了區域性敏感性的雜湊注意力。為了讓自注意力的空間複雜度也變小,從o t 變小...

學習筆記11 預訓練模型

預訓練模型就是之前用較大的資料集訓練出來的模型,這個模型通過微調,在另外類似的資料集上訓練。一般預訓練模型規模比較大,訓練起來占用大量的記憶體資源。然後是乙個全域性池化層,全域性池化層可以取代view 全域性池化層之後,是分類器,而我們要改的就是這個分類器 分類器需要改的地方就只有最後的輸出維度 m...