DL中的訓練集、驗證集、驗證集 (建議比例:6:2:2 或 8:1:1)
訓練集(Training set):學習樣本數據集,通過匹配一些參數來建立一個分類器。建立一種分類的方式,主要是用來訓練模型的。
驗證集(Validation set):對學習出來的模型,調整分類器的參數,如在神經網絡中選擇隱藏單元數。驗證集還用來確定網絡結構或控制模型複雜程度的參數。
測試集(Test set):主要是測試訓練好的模型的分辨能力(識別率等)
不同set分割代碼實現:
split = np.random.rand(len(x))
# x_train shape=(20930, 10064)
train_flag = split <= 0.6
x_train = x[train_flag,:]
y_train = y[train_flag]
valid_flag =(split > 0.6) & (split <= 0.8)
x_valid = x[valid_flag,:]
y_valid = y[valid_flag]
test_flag = split > 0.8
x_test = x[test_flag,:]
y_test = y[test_flag]
keras 實踐:
1.validation set
注:Keras中,驗證集劃分只要在fit函數裏設置validation_split的值就好了,這個對應了取訓練集中百分之幾的數據出來當做驗證集。但由於shuffle是在validation _split之後執行的,所以如果一開始訓練集沒有shuffle的話,有可能使驗證集全是負樣本。
hist=model.fit(train_set_x,train_set_y,batch_size=256,shuffle=True,nb_epoch=nb_epoch,validation_split=0.1)
2.test set
這裏注意evaluate和fit函數的默認batch_size都是32,自己記得修改。
print model.evaluate(test_set_x,test_set_y ,batch_size=256)
關於在驗證集和測試集上的準確率差別,測試集準確率是否會比驗證集上下降很多,還不清楚。經一次實驗,準確率差不多。有待進一步學習。