日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

训练集(training)、验证集(validation)和测试集(test)

發(fā)布時間:2023/12/31 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 训练集(training)、验证集(validation)和测试集(test) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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對三個網(wǎng)絡都進行訓練(用相同的train訓練三個網(wǎng)絡),然后用validation來測試三個網(wǎng)絡(validation對三個網(wǎng)絡也是一樣的),我們發(fā)現(xiàn)網(wǎng)絡B的效果最好,所以我們認為對于本任務,網(wǎng)絡B的結構是效果最好的。
  • 當然我們現(xiàn)在訓練的網(wǎng)絡都只是粗訓練,現(xiàn)在我們要針對網(wǎng)絡B開始精細訓練:將train和validation合并組成新的train,現(xiàn)在我們有數(shù)據(jù)train和test,開始針對B網(wǎng)絡精細訓練了
  • 對于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)絡模型,開始訓練最終模型

    model=get_model() model.train(np.concatenate([training_data,validation_data])) # concatenate是拼接Training和Validation為新的Training test_score=model.evaluate(test_data) # 再使用Test測試得分

    總結
    以上方法簡單易理解,但是缺點也明顯:

    • 如果樣本數(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ù)的平均值。

    k=4 num_validation_samples=len(data)//k # 驗計算得證集的樣本數(shù)np.random.shuffle(data) # 數(shù)據(jù)打亂validation_scores=[] # 儲存每折的驗證集得分 for fold in range(k):validation_data=data[num_validation_samples * fold : num_validation_samples * (fold+1)] # 選擇驗證集分區(qū)training_data=data[:num_validation_samples * fold]+data[num_validation_samples * (fold+1):] #剩余的作為訓練集model=get_model()model.train(training_data)validation_acore=model.evaluate(validation_data)validation_acores.append(validation_acore) # 將該折的得分儲存到分數(shù)列表中 validation_score=np.average(validation_scores) # 計算平均值:K折驗證分數(shù)的均值model=get_model() # 現(xiàn)在訓練最終模型 model.train(data) test_score=model.evaluate(test_data)

    3. 重復K折驗證

    如果可用數(shù)據(jù)相對較少,而你又需要盡可能精確評估模型,可以選擇帶有打亂數(shù)據(jù)的重復K折驗證:多次使用K折驗證,在每次使用K折驗證前都先將數(shù)據(jù)打亂,最終分數(shù)時每次K折驗證分數(shù)的均值(K折驗證分數(shù)又是每折的均值)。

    總結

    以上是生活随笔為你收集整理的训练集(training)、验证集(validation)和测试集(test)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。