預訓練模型&遷移學習
預訓練模型&遷移學習
預訓練模型概念
預訓練模型是一個已經訓練好的保存下來的網絡
該網絡以前在一個大型的數據集上進行了訓練(如圖像相關的網絡在ImageNet數據上進行了訓練)
做用
能夠用來開箱即用的解決方案
能夠將預訓練模型當作特徵提取裝置來使用,用於遷移學習
當預訓練模型學習到的特徵容易泛化的時候,遷移學習才能獲得比較有效的使用
遷移學習
先在一個基礎的數據集上進行任務的訓練,生成一個基礎網絡
而後將學習到的特徵從新進行調整或遷移到另外一個目標網絡上,用來訓練目標任務的數據集。
遷移學習是一種優化方法,節省時間,或者能得到更好的性能的捷徑
遷移學習在什麼狀況下有效
- 當預訓練模型(預訓練獲取到的特徵)是容易泛化的,那麼遷移學習就能有效的進行
須要微調來完成遷移學習
案例
採用預訓練模型,這樣我不須要從新訓練個人整個結構,只須要針對其中的幾層進行訓練便可。
我採用了在ImageNet數據集上預先訓練好的VGG16模型,這個模型能夠在Keras庫中找到。
只將softmax層的1000個輸出改成16個,從而適應咱們這個問題的情景
隨後從新訓練了dense layer
結構的準確率可以達到70%
只須要針對dense layer進行訓練,所需時間基本能夠忽略
如何使用預訓練模型
場景一:數據集小,數據類似度高(與pre-trained model的訓練數據相比而言)
- 不須要從新訓練模型。咱們只須要將輸出層改制成符合問題情境下的結構就好
- 好比說咱們使用在ImageNet上訓練的模型來辨認一組新照片中的小貓小狗,咱們只須要把dense layer和最終softmax layer的輸出從1000個類別改成2個類別(貓,狗)
場景二:數據集小,數據類似度不高
- 能夠凍結預訓練模型中的前k個層中的權重,而後從新訓練後面的n-k個層
- 由於數據的類似度不高,從新訓練的過程就變得很是關鍵
- 新數據集大小的不足,則是經過凍結預訓練模型的前k層進行彌補
場景三:數據集大,數據類似度不高
- 由於實際數據與預訓練模型的訓練數據之間存在很大差別,採用預訓練模型將不會是一種高效的方式
- 最好的方法仍是將預處理模型中的權重全都初始化後在新數據集的基礎上重頭開始訓練
場景四:數據集大,數據類似度高
- 保持模型原有的結構和初始權重不變,隨後在新數據集的基礎上從新訓練
從上面的四個場景能夠看出,如何使用預訓練模型由新舊數據集的大小和類似度來決定
缺點
一些預訓練模型可能會比較大
優勢
更高的起點:源模型中的初始性能比其餘方法要高
更大的坡度:在訓練源模型期間性能的提升速度比其餘狀況下更陡峭
更好的漸近線:訓練好的模型的融合性能要好於其餘狀況
能夠自定義預訓練模型並將其專門用於某些問題
模型微調的方法
特徵提取
- 將預訓練模型當作特徵提取來使用
- 將輸出層去掉,將剩下的整個網絡當作一個特徵提取器,從而應用到新的數據集中
採用預訓練模型的結構
- 預訓練模型的模型結構保持不變
- 將全部的權重從新隨機初始化
- 根據本身的數據集進行訓練
訓練特定的層,凍結其餘層
- 對預訓練模型進行部分的訓練
- 將模型起始的一些層的權重鎖定,保持不變
- 從新訓練未鎖定的層,獲得新的權重

歡迎關注本站公眾號,獲取更多信息