如果資料集太小的話不管怎麼去加工處理,總會出現過擬合問題,使得精度不會那麼的高,所以就要引入預訓練過的模型了,預訓練的模型通常是大數量的資料訓練過的,而且特點就在於挑選的預訓練模型是和現有問題有著相似性的。
這裡使用的是乙個簡單且老的模型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...