CV基礎 模型整合

2021-10-06 18:26:58 字數 2840 閱讀 8601

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

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

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

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

深度學習中的整合學習

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

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

1.2 tta

測試集資料擴增(test time augmentation,簡稱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) in enumerate(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

1.3 snapshot

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

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

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

零基礎入門CV賽事 Task5 模型整合

本章講解的知識點包括 整合學習方法 深度學習中的整合學習和結果後處理思路。stacking先從初始資料集訓練出初級學習器 個體學習器 然後 生成 乙個新資料集用於訓練次級學習器 用於結合的學習器,也稱元學習器meta learner 新的資料集中,初級學習器的輸出被當作樣例輸入特徵。注 訓練階段,次...

零基礎入門CV賽事 Task5 模型整合

學習整合學習方法以及交叉驗證情況下的模型整合 學會使用深度學習模型的整合學習 目的是提高 精度 方法有 stacking bagging boosting等,例如在機器學習中,對10個cnn模型可以使用如下方式進行整合 對 的結果的概率值進行平均,然後解碼為具體字元 對 的字元進行投票,得到最終字元...

零基礎入門CV賽事 Task5 模型整合

k means通常被稱為勞埃德演算法,這在資料聚類中是最經典的,也是相對容易理解的模型。演算法執行的過程分為4個階段。1.首先,隨機設k個特徵空間內的點作為初始的聚類中心。2.然後,對於根據每個資料的特徵向量,從k個聚類中心中尋找距離最近的乙個,並且把該資料標記為這個聚類中心。3.接著,在所有的資料...