一碗酸梅湯 作品

第267章 數據增廣和集成學習

    經過仔細斟酌,江寒確定了“優勝者”模型。

    隨後,他就開始考慮,如何進一步優化這個網絡的性能。

    像是網絡的主體結構、權重初始化方案、數據正則化的方法、激活函數的選擇……

    這類關鍵因素,在之前的第一輪訓練中,就已經確定了下來,無需再做調整。

    但除此之外,可以優化的地方依然不少。

    比如稍微改變一點學習率,少量增加或減少隱藏神經元的個數,微調一下minibatch的大小……

    這些都有可能對網絡的性能,產生微妙的影響。

    而且,每一點細微的調整,會產生什麼樣的效果,不實際訓練、測試一番,是無法預估的。

    所以接下來,江寒將“優勝者”代碼複製了100份。

    這樣一來,這個“優勝者”就擁有了100多個“雙胞胎兄弟”,或者說:分身。

    隨後,他就採用不同的方案,對這100多份代碼,逐一進行了微調。

    等到進行完第二輪訓練後,從中再次選出唯一優勝者。

    有點類似“養蠱”。

    策略已經定下了,但江寒並沒有馬上開啟第二輪訓練。

    他還打算再做一個比較重要的實驗,那就是增廣數據。

    kaggle官方提供了20萬條訓練數據,理論上說,對於絕大多數機器學習模型,這個數據量已經足夠使用了。

    但誰會嫌棄數據太多呢?

    能提供的數據越多,神經網絡的學習效果就越好,訓練得越充足,性能自然也就越強。

    反正一般來說,不會變得更糟。

    所以,何樂而不為?

    所謂數據增廣,就是在不改變圖像類別的前提下,人為地擴充數據。

    這樣做,常常可以有效地提高模型的泛化能力。

    常用的數據增廣方式,包括水平翻轉、旋轉、縮放、平移、裁剪、顏色抖動……

    當然,也可以將多種操作組合起來,從而獲得更多的數據。

    例如,同時做小角度的旋轉和隨機尺度變換,再微調一下像素在hsv顏色空間中的飽和度、亮度、色調……

    江寒很快用python編寫了一份代碼,對訓練數據集進行了擴充。

    原本的18萬條訓練數據,經過各種運算,足足演變出了將近200萬條數據。

    這樣,第二輪訓練終於可以開始了。

    江寒將100個“優勝者”分身依次啟動。

    隨後,他琢磨了一下,又將剛才排名前15的模型,全都拉了過來。

    包括上次排名第一的“書呆子”、排名第三的“黑馬中等生”,以及排位在4~15名的“其他學生”。