一碗酸梅湯 作品
第267章 數據增廣和集成學習
經過仔細斟酌,江寒確定了“優勝者”模型。
隨後,他就開始考慮,如何進一步優化這個網絡的性能。
像是網絡的主體結構、權重初始化方案、數據正則化的方法、激活函數的選擇……
這類關鍵因素,在之前的第一輪訓練中,就已經確定了下來,無需再做調整。
但除此之外,可以優化的地方依然不少。
比如稍微改變一點學習率,少量增加或減少隱藏神經元的個數,微調一下minibatch的大小……
這些都有可能對網絡的性能,產生微妙的影響。
而且,每一點細微的調整,會產生什麼樣的效果,不實際訓練、測試一番,是無法預估的。
所以接下來,江寒將“優勝者”代碼複製了100份。
這樣一來,這個“優勝者”就擁有了100多個“雙胞胎兄弟”,或者說:分身。
隨後,他就採用不同的方案,對這100多份代碼,逐一進行了微調。
等到進行完第二輪訓練後,從中再次選出唯一優勝者。
有點類似“養蠱”。
策略已經定下了,但江寒並沒有馬上開啟第二輪訓練。
他還打算再做一個比較重要的實驗,那就是增廣數據。
kaggle官方提供了20萬條訓練數據,理論上說,對於絕大多數機器學習模型,這個數據量已經足夠使用了。
但誰會嫌棄數據太多呢?
能提供的數據越多,神經網絡的學習效果就越好,訓練得越充足,性能自然也就越強。
反正一般來說,不會變得更糟。
所以,何樂而不為?
所謂數據增廣,就是在不改變圖像類別的前提下,人為地擴充數據。
這樣做,常常可以有效地提高模型的泛化能力。
常用的數據增廣方式,包括水平翻轉、旋轉、縮放、平移、裁剪、顏色抖動……
當然,也可以將多種操作組合起來,從而獲得更多的數據。
例如,同時做小角度的旋轉和隨機尺度變換,再微調一下像素在hsv顏色空間中的飽和度、亮度、色調……
江寒很快用python編寫了一份代碼,對訓練數據集進行了擴充。
原本的18萬條訓練數據,經過各種運算,足足演變出了將近200萬條數據。
這樣,第二輪訓練終於可以開始了。
江寒將100個“優勝者”分身依次啟動。
隨後,他琢磨了一下,又將剛才排名前15的模型,全都拉了過來。
包括上次排名第一的“書呆子”、排名第三的“黑馬中等生”,以及排位在4~15名的“其他學生”。
隨後,他就開始考慮,如何進一步優化這個網絡的性能。
像是網絡的主體結構、權重初始化方案、數據正則化的方法、激活函數的選擇……
這類關鍵因素,在之前的第一輪訓練中,就已經確定了下來,無需再做調整。
但除此之外,可以優化的地方依然不少。
比如稍微改變一點學習率,少量增加或減少隱藏神經元的個數,微調一下minibatch的大小……
這些都有可能對網絡的性能,產生微妙的影響。
而且,每一點細微的調整,會產生什麼樣的效果,不實際訓練、測試一番,是無法預估的。
所以接下來,江寒將“優勝者”代碼複製了100份。
這樣一來,這個“優勝者”就擁有了100多個“雙胞胎兄弟”,或者說:分身。
隨後,他就採用不同的方案,對這100多份代碼,逐一進行了微調。
等到進行完第二輪訓練後,從中再次選出唯一優勝者。
有點類似“養蠱”。
策略已經定下了,但江寒並沒有馬上開啟第二輪訓練。
他還打算再做一個比較重要的實驗,那就是增廣數據。
kaggle官方提供了20萬條訓練數據,理論上說,對於絕大多數機器學習模型,這個數據量已經足夠使用了。
但誰會嫌棄數據太多呢?
能提供的數據越多,神經網絡的學習效果就越好,訓練得越充足,性能自然也就越強。
反正一般來說,不會變得更糟。
所以,何樂而不為?
所謂數據增廣,就是在不改變圖像類別的前提下,人為地擴充數據。
這樣做,常常可以有效地提高模型的泛化能力。
常用的數據增廣方式,包括水平翻轉、旋轉、縮放、平移、裁剪、顏色抖動……
當然,也可以將多種操作組合起來,從而獲得更多的數據。
例如,同時做小角度的旋轉和隨機尺度變換,再微調一下像素在hsv顏色空間中的飽和度、亮度、色調……
江寒很快用python編寫了一份代碼,對訓練數據集進行了擴充。
原本的18萬條訓練數據,經過各種運算,足足演變出了將近200萬條數據。
這樣,第二輪訓練終於可以開始了。
江寒將100個“優勝者”分身依次啟動。
隨後,他琢磨了一下,又將剛才排名前15的模型,全都拉了過來。
包括上次排名第一的“書呆子”、排名第三的“黑馬中等生”,以及排位在4~15名的“其他學生”。