在neural network中,训练,validation和testing集之间有什么区别?

我正在使用这个库来实现一个学习代理。

我已经生成了培训案例,但我不确定validation和testing集是什么。
老师说:

70%应该是培训案例,10%将是testing案例,其余20%应该是validation案例。

编辑

我有这个训练的代码,但我不知道何时停止训练。

def train(self, train, validation, N=0.3, M=0.1): # N: learning rate # M: momentum factor accuracy = list() while(True): error = 0.0 for p in train: input, target = p self.update(input) error = error + self.backPropagate(target, N, M) print "validation" total = 0 for p in validation: input, target = p output = self.update(input) total += sum([abs(target - output) for target, output in zip(target, output)]) #calculates sum of absolute diference between target and output accuracy.append(total) print min(accuracy) print sum(accuracy[-5:])/5 #if i % 100 == 0: print 'error %-14f' % error if ? < ?: break 

编辑

validation数据可以得到0.2的平均误差,也许20次训练迭代后,应该是80%?

平均误差=在validation数据input/validation数据大小的情况下,validation目标与输出之间绝对差值的总和。

 1 avg error 0.520395 validation 0.246937882684 2 avg error 0.272367 validation 0.228832420879 3 avg error 0.249578 validation 0.216253590304 ... 22 avg error 0.227753 validation 0.200239244714 23 avg error 0.227905 validation 0.199875013416 

培训期间使用培训和确认集。

 for each epoch for each training data instance propagate error through the network adjust the weights calculate the accuracy over training data for each validation data instance calculate the accuracy over the validation data if the threshold validation accuracy is met exit training else continue training 

一旦你完成了训练,然后你运行你的testing集,并validation准确性是足够的。

训练集 :这个数据集用于调整neural network的权重。

validation集 :该数据集用于最小化过度拟合。 您不用这个数据集来调整networking的权重,只是validation在训练数据集上的任何精度的增加实际上都会提高一个数据集的准确度,而这个数据集之前并没有显示给networking,或者至lessnetworking尚未接受培训(即validation数据集)。 如果训练数据集的准确度增加,但是validation数据集的准确性保持不变或降低,那么您的neural network过度配合,应该停止训练。

testing集 :该数据集仅用于testing最终的解决scheme,以确认networking的实际预测能力。

训练集 :用于学习的一组示例,即适合分类器的参数[即权重]。

validation集 :用于调整分类器的参数(即,体系结构而非权重)的一组示例,例如用于selectneural network中隐藏单元的数量。

testing集 :一组示例仅用于评估完全指定的分类器的性能[泛化]。

ftp://ftp.sas.com/pub/neural/FAQ1.txt章节“; 什么是人口,样本,培训集合,devise集合,validation

对于来自您的数据集(批量学习)的不同数据集,误差表面会有所不同。 因此,如果您的testing集数据find一个非常好的局部极小值,那么这可能不是一个非常好的点,并且对于相同的问题,可能是由其他一组数据生成的曲面中的一个非常糟糕的点。 因此,您需要计算这样一个模型,该模型不仅为训练集find了一个很好的权重configuration,而且还能够预测具有良好误差的新数据(不在训练集中)。 换句话说,networking应该能够概括这些例子,以便学习数据,而不是通过过度拟合训练数据来记忆或加载训练集。

validation数据集是您要学习的function的一组数据,您不直接使用它来训练networking。 您正在使用您称为训练数据集的一组数据来训练networking。 如果使用基于梯度的algorithm来训练networking,那么误差曲面和某个点的梯度将完全依赖于训练数据集,因此训练数据集将被直接用于调整权重。 为了确保不过度使用networking,您需要将validation数据集inputnetworking,并检查错误是否在某个范围内。 由于validation集不是直接用来调整networking权重,因此validation和testing集的良好误差表明networking可以很好地预测列车集的例子,而且当新的向训练过程中未使用的networking展示了例子。

提前停止是一种停止训练的方法。 有不同的变化可供使用,主要轮廓是,列车和validation集错误都被监控,每次迭代(反向和兄弟)列车错误减less,首先validation错误减less。 validation错误开始boost时,培训将停止。 此时的权重configuration表示一个模型,它可以很好地预测训练数据,以及networking不能看到的数据。 但是因为validation数据实际上间接地影响重量configuration以select重量configuration。 这是testing集进来的地方。这组数据在训练过程中从不使用。 一旦基于validation集select模型,则将testing集数据应用于networking模型,并find该组的错误。 这个错误代表了我们可以从相同问题的绝对新数据中得出的错误。

编辑:

另外,如果您没有足够的数据用于validation集,则可以使用交叉validation来调整参数以及估计testing错误。

交叉validation集用于模型select,例如,select给定参数集的错误数最less的多项式模型。 然后使用testing集来报告所选模型的泛化误差。 从这里: https : //www.coursera.org/learn/machine-learning/lecture/QGKbr/model-selection-and-train-validation-test-sets

我相信,在训练模式下,您允许networking节点更改其input或输出权重的值。 您也提供积极或消极的反馈,以改变权重。 换句话说,你给出一个input集合,并且反馈输出的输出XOR与已知的真/假相比,那么就不是这样。 换句话说,当答案匹配时,你给予积极的反馈,当他们不同意时,你给出负面的反馈。

不知道testing/validation案例之间的区别是什么,除了可能你知道validation案例的答案,并使用它们来validation输出,也许你不知道答案的testing案例,只是接受你的答案validation的neural network…