在機器學習中的整合學習可以在一定程度上提高**精度,常見的整合學習方法有stacking、bagging和boosting,同時這些整合學習方法與具體驗證集劃分聯絡緊密。由於深度學習模型一般需要較長的訓練週期,如果硬體條件不允許建議選取留出法,如果需要追求精度可以使用交叉驗證的方法。
10折交叉驗證,訓練得到10個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)也是常用的整合學習技巧,在之前的文章分析過,資料擴增不僅可以在訓練時候用,而且可以同樣在**時候進行資料擴增,對同乙個樣本**三次,然後對三次結果進行平均。
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
snapshot
假設我們訓練了10個cnn則可以將多個模型的**結果進行平均。但是加入只訓練了乙個cnn模型,如何做模型整合呢?
在**snapshot ensembles中,作者提出使用cyclical learning rate進行訓練模型,並儲存精度比較好的一些checkopint,最後將多個checkpoint進行模型整合。
於在cyclical learning rate中學習率的變化有週期性變大和減少的行為,因此cnn模型很有可能在跳出區域性最優進入另乙個區域性最優。在snapshot**中作者通過使用表明,此種方法可以在一定程度上提高模型精度,但需要更長的訓練時間。
整合學習只能在一定程度上提高精度,並需要耗費較大的訓練時間,因此建議先使用提高單個模型的精度,再考慮整合學習過程;
具體的整合學習方法需要與驗證集劃分方法結合,dropout和tta在所有場景有可以起作用。
街景字元編碼識別 Task05 模型整合
學習目標 模型整合 整合學習 ensemble learning 通過構建並結合多個弱學習器來綜合得到乙個強學習器的方法。機器學習領域的整合方法有bagging boosting stacking。bagging bootstrap aggregating,裝袋 bagging使用裝袋取樣來獲取資料...
街景字元編碼識別 Task5 模型整合
在機器學習中的整合學習可以在一定程度上提高 精度,常見的整合學習方法有stacking bagging和boosting,同時這些整合學習方法與具體驗證集劃分聯絡緊密。由於深度學習模型一般需要較長的訓練週期,如果硬體裝置不允許建議選取留出法,如果需要追求精度可以使用交叉驗證的方法。下面假設構建了10...
天池 街景字元編碼識別 模型整合
結果後處理 在機器學習中的整合學習可以在一定程度上提高 精度,常見的整合學習方法有stacking bagging和boosting,同時這些整合學習方法與具體驗證集劃分聯絡緊密。由於深度學習模型一般需要較長的訓練週期,如果硬體裝置不允許建議選取留出法,如果需要追求精度可以使用交叉驗證的方法。那麼在...