训练集(training)、验证集(validation)和测试集(test)
0.什么是訓練集、驗證集和測試集?
- 訓練集(train):訓練模型
- 驗證集(val):評估模型
- 測試集(test):一旦找到了最佳參數(shù),就開始最終訓練
使用訓練集訓練多個網(wǎng)絡模型,再使用驗證集測試這些網(wǎng)絡,找到得分最高的那個網(wǎng)絡作為我們選擇的最佳網(wǎng)絡,再將訓練集和驗證集合并,重新訓練這個最佳網(wǎng)絡,得到最佳網(wǎng)絡參數(shù)。
打個比方:我們現(xiàn)在有個任務,但是解決這個任務的網(wǎng)絡有網(wǎng)絡A、網(wǎng)絡B和網(wǎng)絡C,如何找到效果最好的哪個?
對于train、validation和test的區(qū)分有簡單留出、K折驗證和重復K折驗證三種,具體如下:
1. 簡單留出驗證的偽代碼
num_validation_samples=10000 # 驗證集樣本數(shù) np.random.shuffle(data) # 通常需要打亂數(shù)據(jù)calidation_data=data[:num_calidation_samples] # 定義驗證集data=data[num_calidation_samples:] # 截取剩余數(shù)據(jù)給變量data training_data=data[:] # 定義訓練集:相當于換個名字,實屬疑惑,感覺走彎路model=get_model() model.train(training_data) # 用train訓練model validation_score=model.evaluate(validation_data) # 用val驗證得分現(xiàn)在假設你已經選好了網(wǎng)絡模型,開始訓練最終模型
總結
以上方法簡單易理解,但是缺點也明顯:
- 如果樣本數(shù)量太少,驗證集和測試集更少,無法在統(tǒng)計學上代表數(shù)據(jù)
- 劃分數(shù)據(jù)前時,進行不同的隨機打亂則得到的模型性能差別可能很大
解決以上問題的方法有一下兩種:
- K折驗證
- 重復的K折驗證
2. K折驗證
如上,當我們不確定多個模型哪個更好時,通過K折驗證找到loss最小的。
K折驗證時將數(shù)據(jù)劃分為大小相同的K個分區(qū)。對于每個分區(qū)i,在剩余的K-1個分區(qū)上訓練模型,然后再分區(qū)i上評估模型。最終分數(shù)等于K個分數(shù)的平均值。
3. 重復K折驗證
如果可用數(shù)據(jù)相對較少,而你又需要盡可能精確評估模型,可以選擇帶有打亂數(shù)據(jù)的重復K折驗證:多次使用K折驗證,在每次使用K折驗證前都先將數(shù)據(jù)打亂,最終分數(shù)時每次K折驗證分數(shù)的均值(K折驗證分數(shù)又是每折的均值)。
總結
以上是生活随笔為你收集整理的训练集(training)、验证集(validation)和测试集(test)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 备战2022年5月软考高项 —— 信息系
- 下一篇: 随机微分方程