街景字元識別 模型整合

2021-10-06 15:23:32 字數 2842 閱讀 1047

3. 後處理

整合學習方法可以提高**精度,常見的有stacking、bagging和boosting。一般利用交叉驗證法提高精度,如下所示。

使用10折交叉驗證法,得到10個cnn模型,可通過以下方法進行整合。

平均**結果的概率值,然後解碼為具體字元。

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

dropout在訓練過程中會隨機選取一部分節點,令其停止工作,但在**時又讓所有節點參與工作。

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

tta,測試集資料擴增,在**的時候進行資料擴增操作,比如對同乙個樣本**三次,然後對三次結果進行平均。**示例如下:

def

predict

(test_loader, model, tta=10)

: model.

eval()

test_pred_tta =

none

# 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

snapshot是利用週期學習率來訓練模型,儲存多個高精度的測試點,最後將這些檢查點進行模型整合。

雖然此方法可以提高模型精度,但是需要更長的訓練時間。

對**結果進行後處理的方法有:

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

單獨訓練乙個**字元個數的模型,用於修正結果。

參考: datawhale 零基礎入門cv賽事-task5 模型整合.

天池 街景字元識別 Task5 模型整合

結果後處理 小節在機器學習中的整合學習可以在一定程度上提高 精度,常見的整合學習方法有stacking bagging和boosting,同時這些整合學習方法與具體驗證集劃分聯絡緊密。由於深度學習模型一般需要較長的訓練週期,如果硬體裝置不允許建議選取留出法,如果需要追求精度可以使用交叉驗證的方法。下...

天池 街景字元編碼識別 模型整合

結果後處理 在機器學習中的整合學習可以在一定程度上提高 精度,常見的整合學習方法有stacking bagging和boosting,同時這些整合學習方法與具體驗證集劃分聯絡緊密。由於深度學習模型一般需要較長的訓練週期,如果硬體裝置不允許建議選取留出法,如果需要追求精度可以使用交叉驗證的方法。那麼在...

天池街景字元識別個人看法

個人對賽題的理解,以及對實現的思路的一些看法,小白看法,也不知道對不對 對賽題的理解 由於以前個人對cnn有一點基礎,我覺得本次賽題即街景字元編碼識別可以用cnn來實現,convolutional是對影象特徵提取比較好的方式。傳統方式沒有運用卷積操作,直接把個個類別的影象對應的畫素直接flatten...