CNN网络实战技巧
學習目標
- 目標
- 了解遷移學習以及技巧
- 應用
- 無
我們來看一個個問題如果我們要做一個具體場景的計算機視覺任務,那么從頭開始訓練一個網(wǎng)絡是合適的選擇嗎?怎么樣才能避免浪費過多的計算時間?
3.5.1 遷移學習(Transfer Learning)
3.5.1.1 介紹
- 定義
- 遷移學習就是利用數(shù)據(jù)、任務或模型之間的相似性,將在舊的領域學習過或訓練好的模型,應用于新的領域這樣的一個過程。
- 兩個任務的輸入屬于同一性質:要么同是圖像、要么同是語音或其他
遷移學習到底在什么情況下使用呢?有兩個方面需要我們考慮的
- 1、當我們有海量的數(shù)據(jù)資源時,可以不需要遷移學習,機器學習系統(tǒng)很容易從海量數(shù)據(jù)中學習到一個魯棒性很強的模型。但通常情況下,我們需要研究的領域可獲得的數(shù)據(jù)極為有限,在少量的訓練樣本上精度極高,但是泛化效果極差。
- 2、訓練成本,很少去從頭開始訓練一整個深度卷積網(wǎng)絡,從頭開始訓練一個卷積網(wǎng)絡通常需要較長時間且依賴于強大的 GPU 計算資源。
3.5.1.2 方法
- 最常見的稱呼叫做fine tuning,即微調(diào)
- 已訓練好的模型,稱之為Pre-trained model
通常我們需要加載以訓練好的模型,這些可以是一些機構或者公司在ImageNet等類似比賽上進行訓練過的模型。TensorFlow同樣也提供了相關模型地址:https://github.com/tensorflow/models/tree/master/research/slim
下圖是其中包含的一些模型:
?
3.5.1.3 過程
這里我們舉一個例子,假設有兩個任務A和B,任務 A 擁有海量的數(shù)據(jù)資源且已訓練好,但并不是我們的目標任務,任務 B 是我們的目標任務。下面的網(wǎng)絡模型假設是已訓練好的1000個類別模型
?
而B任務假設是某個具體場景如250個類別的食物識別,那么該怎么去做
- 1、建立自己的網(wǎng)絡,在A的基礎上,修改最后輸出結構,并加載A的模型參數(shù)
- 2、根據(jù)數(shù)據(jù)大小調(diào)整
- 如果B任務數(shù)據(jù)量小,那么我們可以選擇將A模型的所有的層進行freeze(可以通過Tensorflow的trainable=False參數(shù)實現(xiàn)),而剩下的輸出層部分可以選擇調(diào)整參數(shù)訓練
- 如果B任務的數(shù)據(jù)量大,那么我們可以將A中一半或者大部分的層進行freeze,而剩下部分的layer可以進行新任務數(shù)據(jù)基礎上的微調(diào)
總結
- 上一篇: 经典分类网络结构
- 下一篇: 商城数据库表设计介绍