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)
关于在验证集和测试集上的准确率差别,测试集准确率是否会比验证集上下降很多,还不清楚。经一次实验,准确率差不多。有待进一步学习。