训练集 、测试集、验证集
(1)训练集 、测试集、验证集的区别和联系 【Chatper 2 2.2 (1) 3)数据集划分】
训练集和验证集用于参数的确定或参数模型的选择,
训练集:用于训练模型的参数。
验证集:训练模型的超参数,或者验证多个模型哪个更优。
两者的参数层次不一样。如线性回归模型和卷积神经网络,训练集分别确定的是回归方程的系数和卷积核参数,而验证集可以观测哪个模型更有效。例如手写数字识别任务,只看线性回归模型训练后的结果可能不错,但是验证集运行后模型无法得出预测数字,因此在训练集之外的验证集,才能够证明模型有效性。实际情况可能没有验证集。
测试集:评价最终模型上线后的最终效果。
只要模型在训练集和验证集运行过,样本就相当于被污染了,样本表现就不能代表模型真实的表现。测试集不参与模型参数或超参数的确定,一般模型最终在测试集的表现可认为是在上线后实践的效果。
(5)训练集、验证集和测试集是来自用一个抽样总体的吗?
是的,否则数据结构会出现问题。
数据处理的问题
1 归一化
(2)线性回归模型中,归一化只使用训练集的均值、最大值、最小值,为什么不适用全体数据集作为指标呢?【Chatper 2.2 (1) 4)数据归一化处理】【Chatper 2.2 (4) 4)确定损失函数更小的点】.
目的是为了统一步长。如右图,对于宽一点的步长应该大,窄的步长应该小,不好将步长设置为同一个数值。通常将训练数据标准化固定在一个区间范围内,使参数规整,有利于训练稳定。
如果分子为真实值-最小值,结果为[0,1]区间范围内,而不是我们期望特征输入经归一化后的中值为0(此时梯度变化最为明显)。分子为真实值-均值,结果为[-0.5,0.5]区间范围内,可以实现下降到0。
(3)前向计算forward输出的值需要进行归一化吗?没有归一化计算的loss值会很大吗?【Chatper 2.2 (4) 4)确定损失函数更小的点】
前向计算输出为预测结果值,归一化的目的是为了参数规整,因此为输出结果做归一化没有意义。线性回归输出的是实数值,没有必要做归一化。
(4)线性回归模型中,归一化的对象为训练集,而后面归一化处理的是整个数据集,会不会导致不一致?【Chatper 2.2 (4) 4)确定损失函数更小的点】
取决于场景的不同。
一般情况,在参数确定或模型择优的情况下,归一化对象都是训练集。测试集用于模拟真实世界的情况,数据情况未知,最好不要归一。
但是在已知最优的模型的情况下,为了用更多数据量使模型更加稳定,可以将训练集和测试集合在一起计算,但使用要谨慎,可能出现浪费测试集的情况。
2 样本乱序
(12)调用paddle.dataset.mnist.train()
读取完训练集后,调用fluid.io.shuffle()
函数进行乱序时,发现buf_size设置不合理。【