本文**
卷積神經網路(cnn)可以說是目前處理影象最有力的工具了。而在機器學習分類問題中,樣本不平衡又是乙個經常遇到的問題。最近在使用cnn進行分類時,發現cnn對訓練集樣本不平衡問題很敏感。在網上搜尋了一下,發現這篇文章 對這個問題已經做了比較細緻的探索。於是就把它簡單整理了一下,相關的記錄如下。
一、實驗資料與使用的網路
所謂樣本不平衡,就是指在分類問題中,每一類對應的樣本的個數不同,而且差別較大。這樣的不平衡的樣本往往使機器學習演算法的表現變得比較差。那麼在cnn中又有什麼樣的影響呢?作者選用了cifar-10作為資料來源來生成不平衡的樣本資料。
cifar-10是乙個簡單的影象分類資料集。共有10類(airplane,automobile,bird,cat,deer,dog, frog,horse,ship,truck),每一類含有5000張訓練,1000張測試。
cifar-10樣例如圖:
訓練時,選擇的網路是這裡的cifar-10訓練網路和引數(來自alex krizhevsky)。這個網路含有3個卷積層,還有10個輸出結點。
之所以不選用效果更好的cnn網路,是因為我們的目的是在實驗時訓練很多次進行比較,而不是獲得多麼好的效能。而這個cnn網路因為比較淺,訓練速度比較快,比較符合我們的要求。
二、類別不平衡資料的生成
直接從原始cifar-10取樣,通過控制每一類取樣的個數,就可以產生類別不平衡的訓練資料。如下表所示:
這裡的每一行就表示「乙份」訓練資料。而每個數字就表示這個類別佔這「乙份」訓練資料的百分比。
dist. 1:類別平衡,每一類都占用10%的資料。
dist. 2、dist. 3:一部分類別的資料比另一部分多。
dist. 4、dist 5:只有一類資料比較多。
dist. 6、dist 7:只有一類資料比較少。
dist. 8: 資料個數呈線性分布。
dist. 9:資料個數呈指數級分布。
dist. 10、dist. 11:交通工具對應的類別中的樣本數都比動物的多
對每乙份訓練資料都進行訓練,測試時用的測試集還是每類1000個的原始測試集,保持不變。
三、類別不平衡資料的訓練結果
以上資料經過訓練後,每一類對應的**正確率如下:
第一列total表示總的正確率,下面是每一類分別的正確率。
從實驗結果中可以看出:
類別完全平衡時,結果最好。類別「越不平衡」,效果越差。比如dist. 3就比dist. 2更不平衡,效果就更差。同樣的對比還有dist. 4和dist. 5,dist. 8和dist. 9。其中dist. 5和dist. 9更是完全訓練失敗了。
四、過取樣訓練的結果
再次訓練,進行測試,結果為:
可以發現過取樣的效果非常好,基本與平衡時候的表現一樣了。
過取樣前後效果對比,可以發現過取樣效果非常好:
五、總結
cnn確實對訓練樣本中類別不平衡的問題很敏感。平衡的類別往往能獲得最佳的表現,而不平衡的類別往往使模型的效果下降。如果訓練樣本不平衡,可以使用過取樣平衡樣本之後再訓練。
這確實是乙個「經驗主義」的結論,但多少給我們平常訓練cnn模型帶來一些啟發和幫助。
hp實訓之測試(第四周)
測試前期比較重要的基礎知識點 1.v模型 需求分析 概要設計 詳細設計 編碼 單元測試 整合測試 系統測試 驗收測試 2.軟體配置項csci 在軟體開發過程中產生的所有資訊構成軟體配置,它們是文件 報告等 3.基線 base line 大概來說,基線是軟體開發的基礎,是重點階段的結點 4.軟體測試分...
了凡四訓感悟
人生近30載,不順之事,可以說是十有五六,自從學習了傳統文化,特別是了凡四訓後,發現人生除了家業 事業,還應該有最為重要的道業,本人學習已有2年時間,發現之後的路雖也時常遇到坎坷,但大方向確實往越來越好發展了,在此,與各位it同仁分享一些感悟以及此道泰斗的一些語錄,希望大家人生變得更有意義。下面是了...
tensorflow學習之新增層並簡單訓練
import tensorflow as tf import numpy as np def add layer inputs,in size,out size,activation function none weights tf.variable tf.random normal in size...