圖片分類

一、理論知識git

選擇了吳恩達的https://www.deeplearning.ai/github

二、機器學習框架框架

考慮到要在手機上跑模型,tensorflow+snpe機器學習

三、模型學習

https://github.com/tensorflow/models/tree/master/research/slim測試

仍是考慮到要在手機上跑模型,選擇了MobileNet_224調試

四、數據預處理接口

因爲使用tensorflow,數據都處理成tfrecords圖片

數據預處理時,對數據進行鏡像,旋轉操做it

考慮到存儲空間,RGB分別使用8位去保存

將數據分紅訓練集,驗證集和測試集。驗證集和測試集數量取min(10%, 10000)

五、模型訓練

使用tensorflow自帶的tensorboard調試模型,打印訓練集每步的batch的損失和準確率,每必定步數(十步)從驗證集中取一個batch計算損失和準確率,再經過tensorboard顯示成曲線圖

訓練開始時,保證損失在降低,而後訓練三四十個epochs後跟進這四個曲線肯定模型是過擬合、擬合不足仍是恰好。若是最後訓練準確率比驗證準確率高不少,訓練損失比驗證損失低,應該是過擬合,特別是驗證損失曲線出現先降低再上升,也是過擬合的特徵。

我的技巧:先不要使用正則化和dropout等防過擬合的手段,甚至能夠增長模型複雜度,獲得一個過擬合的結果,再在這個結果上添加dropout去防過擬合。不論是提升模型複雜度和添加dropout都要小步進行,指望是模型稍過擬合,訓練時添加dropout後擬合正好。每次修改後,在上一次訓練的結果上繼續訓練,即模型重複參數保留上次訓練的結果。

六、模型最後的分類迴歸

圖片分類模型最後通常會使用softmax迴歸,但使用softmax迴歸有一個前提是輸入圖片必須屬於某一個分類,而大部分狀況下用戶使用時輸入的圖片不屬於任何一個分類。即便添加「其餘」分類也不能解決這個問題,由於「其餘」這個分類永遠沒法表明哪怕接近在現實中的」其餘「。解決方法:改爲多二分類,輸出結果變成,輸入圖片屬於每一個分類的可能性,互不影響。當全部分類的可能性都低於閥值時,就能夠認爲圖片屬於」其餘「。注意:使用sigmoid計算損失會出現梯度消失或梯度爆炸,可使用tensorflow的tf.nn.sigmoid_cross_entropy_with_logits接口解決,它使用近似結果避免了那種狀況。

七、遷移學習

因爲最終訓練的結果不理想(100分類,30萬的圖片,top1:72.1%,top5:92.6%),在tensorflow提供的已經訓練好的MobileNet模型上進行遷移學習,保留卷積層(不訓練卷積層的參數),替換全鏈接層,結果(top1:77.2%,top5:95.2%)。

相關文章
相關標籤/搜索