計算機視覺實踐 Task5 模型整合

2021-10-06 18:26:58 字數 4114 閱讀 4059

在機器學習中的整合學習可以在一定程度上提高**精度,常見的整合學習方法有stacking、bagging和boosting,同時這些整合學習方法與具體驗證集劃分聯絡緊密。

由於深度學習模型一般需要較長的訓練週期,如果硬體裝置不允許建議選取留出法,如果需要追求精度可以使用交叉驗證的方法。

下面假設構建了10折交叉驗證,訓練得到10個cnn模型。

那麼在10個cnn模型可以使用如下方式進行整合:

5.3.1 dropout

dropout可以作為訓練深度神經網路的一種技巧。在每個訓練批次中,通過隨機讓一部分的節點停止工作。同時在**的過程中讓所有的節點都其作用。

dropout經常出現在在先有的cnn網路中,可以有效的緩解模型過擬合的情況,也可以在**時增加模型的精度。

加入dropout後的網路結構如下:

# 定義模型

class

svhn_model1

(nn.module)

:def

__init__

(self)

:super

(svhn_model1, self)

.__init__(

)# cnn提取特徵模組

self.cnn = nn.sequential(

nn.conv2d(3,

16, kernel_size=(3

,3), stride=(2

,2))

, nn.relu(),

nn.dropout(

0.25),

nn.maxpool2d(2)

, nn.conv2d(16,

32, kernel_size=(3

,3), stride=(2

,2))

, nn.relu(),

nn.dropout(

0.25),

nn.maxpool2d(2)

,)# self.fc1 = nn.linear(32*

3*7,

11)self.fc2 = nn.linear(32*

3*7,

11)self.fc3 = nn.linear(32*

3*7,

11)self.fc4 = nn.linear(32*

3*7,

11)self.fc5 = nn.linear(32*

3*7,

11)self.fc6 = nn.linear(32*

3*7,

11)defforward

(self, img)

:

feat = self.cnn(img)

feat = feat.view(feat.shape[0]

,-1)

c1 = self.fc1(feat)

c2 = self.fc2(feat)

c3 = self.fc3(feat)

c4 = self.fc4(feat)

c5 = self.fc5(feat)

c6 = self.fc6(feat)

return c1, c2, c3, c4, c5, c6

5.3.2 tta測試集資料擴增(test time augmentation,簡稱tta)也是常用的整合學習技巧,資料擴增不僅可以在訓練時候用,而且可以同樣在**時候進行資料擴增,對同乙個樣本**三次,然後對三次結果進行平均。

# tta 次數

for _ in

range

(tta)

: test_pred =

with torch.no_grad():

for i,

(input

, target)

inenumerate

(test_loader)

: c0, c1, c2, c3, c4, c5 = model(data[0]

) output = np.concatenate(

[c0.data.numpy(

), c1.data.numpy(),

c2.data.numpy(

), c3.data.numpy(),

c4.data.numpy(

), c5.data.numpy()]

, axis=1)

test_pred = np.vstack(test_pred)

if test_pred_tta is

none

: test_pred_tta = test_pred

else

: test_pred_tta += test_pred

return test_pred_tta

5.3.3 snapshot本章的開頭已經提到,假設我們訓練了10個cnn則可以將多個模型的**結果進行平均。但是加入只訓練了乙個cnn模型,如何做模型整合呢?

在**snapshot ensembles中,作者提出使用cyclical learning rate進行訓練模型,並儲存精度比較好的一些checkopint,最後將多個checkpoint進行模型整合。

由於在cyclical learning rate中學習率的變化有週期性變大和減少的行為,因此cnn模型很有可能在跳出區域性最優進入另乙個區域性最優。在snapshot**中作者通過使用表明,此種方法可以在一定程度上提高模型精度,但需要更長的訓練時間。

5.4 結果後處理

在不同的任務中可能會有不同的解決方案,不同思路的模型不僅可以互相借鑑,同時也可以修正最終的**結果。

在本次賽題中,可以從以下幾個思路對**結果進行後處理:

為什麼說dropout可以解決過擬合?

(1)取平均的作用:

先回到標準的模型即沒有dropout,我們用相同的訓練資料去訓練5個不同的神經網路,一般會得到5個不同的結果,此時我們可以採用

「5個結果取均值」或者「多數取勝的投票策略」去決定最終結果。例如3個網路判斷結果為數字9,那麼很有可能真正的結果就是數字9,其它兩個網路給出了錯誤結果。這種「綜合起來取平均」的策略通常可以有效防止過擬合問題。因為不同的網路可能產生不同的過擬合,取平均則有可能讓一些「相反的」擬合互相抵消。dropout掉不同的隱藏神經元就類似在訓練不同的網路,隨機刪掉一半隱藏神經元導致網路結構已經不同,整個dropout過程就相當於對很多個不同的神經網路取平均。而不同的網路產生不同的過擬合,一些互為「反向」的擬合相互抵消就可以達到整體上減少過擬合。

(2)減少神經元之間複雜的共適應關係:

因為dropout程式導致兩個神經元不一定每次都在乙個dropout網路**現。這樣權值的更新不再依賴於有固定關係的隱含節點的共同作用,阻止了某些特徵僅僅在其它特定特徵下才有效果的情況

。迫使網路去學習更加魯棒的特徵

,這些特徵在其它的神經元的隨機子集中也存在。換句話說假如我們的神經網路是在做出某種**,它不應該對一些特定的線索片段太過敏感,即使丟失特定的線索,它也應該可以從眾多其它線索中學習一些共同的特徵。從這個角度看dropout就有點像l1,l2正則,減少權重使得網路對丟失特定神經元連線的魯棒性提高。

計算機視覺 回歸模型

本文仍然是基於computer vision models,learning,and inference這本書的閱讀筆記與心得。雖然看的雲裡霧裡的,但不寫下來恐怕很快一點都不記得了。看的過程還是很吃力,感覺自己在學機器學習與概率論,在公式中掙扎。本章講的是機器學習兩大問題之一的回歸模型,討論的主要是...

計算機視覺 生成模型

給定訓練集,產生與訓練集同分布的新樣本。希望學到乙個模型,其與訓練樣本的分布相近。無監督學習裡的乙個核心問題 密度估計問題。典型思路 利用鏈式準則將影象x的生成概率轉變為每個畫素生成概率的乘積。缺點是 畫素的生成是序列的進行訓練,生成整張的效率太慢了。二者的優點 似然函式可以精確計算 利用似然函式的...

計算機視覺資料集介紹

1 mnist 美國國家標準與技術研究所,national institute of standards and technology nist 官網位址 資料功能 手寫數字分類 簡要說明 訓練集 training set 由來自 250 個不同人手寫的數字構成,其中 50 是高中學生,50 來自人...