CV Task5 模型整合

2021-10-06 18:24:54 字數 3438 閱讀 9480

賽題:零基礎⼊入⻔門cv賽事- 街景字元編碼識別

在上一章我們學習了如何構建驗證集,如何訓練和驗證。本章作為本次賽題學習的最後一章,將會講解如何使用集  

成學習提高**精度。

本章講解的知識點包括:整合學習方法、深度學習中的整合學習和結果後處理思路。

1.學習 整合學習方法以及交叉驗證情況下的模型整合

2. 學會使用深度學習模型的整合學習

在機器學習中的整合學習可以在一定程度上提高**精度,常見的整合學習方法有

stacking

、bagging

和boosting

,  

同時這些整合學習方法與具體驗證集劃分聯絡緊密。

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

叉驗證的方法。

下面假設構建了

10折交叉驗證,訓練得到10個

cnn模型。

那麼在10

個cnn

模型可以使用如下方式進行整合:

對**的結果的概率值進行平均,然後解碼為具體字元;

對**的字元進行投票,得到最終字元。

此外在深度學習中本身還有一些整合學習思路的做法,值得借鑑學習:

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)

def forward(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

測試集資料擴增(

test time augmentation

,簡稱tta

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

# tta 次數

for _ in range(tta):

test_pred =

with torch.no_grad():

for i, (input, target) in enumerate(test_loader):

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

本章的開頭已經提到,假設我們訓練了10個

cnn則可以將多個模型的**結果進行平均。但是加入只訓練了乙個

cnn模型,如何做模型整合呢?

在**snapshot ensembles

中,作者提出使用

cyclical learning rate

進行訓練模型,並儲存精度比較好的一些

checkopint

,最後將多個

checkpoint

進行模型整合。

由千在cyclical learning rate

中學習率的變化有週期性變大和減少的行為,因此

cnn模型很有可能在跳出區域性最優進入另乙個區域性最優。在

snapshot

**中作者通過使用表明,此種方法可以在一定程度上提高模型精度,但需要更長  

的訓練時間。

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

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

統計中每個位置字元出現的頻率,使用規則修正結果;

單獨訓練乙個字元長度**模型,用來**中字元個數,並修正結果。

在本章中我們講解了深度學習模型做整合學習的各種方法,並以此次賽題為例講解了部分**。以下幾點需要同學  

們注意:

整合學習只能在一定程度上提高精度,並需要耗費較大的訓練時間,因此建議先使用提高單個模型的精度,再  

考慮整合學習過程;

具體的整合學習方法需要與驗證集劃分方法結合,

dropout

和tta

在所有場景有可以起作用。

Datawhale 學CV task 5模型整合

記錄幾個關於模型整合的問題 1 validate set的留出法 還有k 折交叉驗證 常見的整合學習方法有stacking bagging和boosting,同時這些整合學習方法與具體驗證集劃分聯絡緊密。原來常說的整合學習,跟驗證集劃分相關,以前常看到整合,但不知道是怎麼做,以為是多個模型test結...

零基礎入門CV Task 05 模型整合

在上一章我們學習了如何構建驗證集,如何訓練和驗證。本章作為本次賽題學習的最後一章,將會講解如何使用整合學習提高 精度。本章講解的知識點包括 整合學習方法 深度學習中的整合學習和結果後處理思路。在機器學習中的整合學習可以在一定程度上提高 精度,常見的整合學習方法有stacking bagging和bo...

Task5 模型整合

1.整合學習方法 假設你有許多基礎分類器 簡單的分類規則 則組合 這些分類規則可能是乙個好主意,可能會比單個規則獲得 更高的精度 選擇基礎分類器時候往往主要考慮的是其簡單性,而非精 度 基礎分類器應該對總體中的一部分不同個體是精確的,他 們組合起來可以有效處理所有個體 即互為補充 基礎分類器之間的差...