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...