为了账号安全,请及时绑定邮箱和手机立即绑定

神经网络中训练,验证和测试集之间有什么区别?

神经网络中训练,验证和测试集之间有什么区别?

有只小跳蛙 2019-12-07 15:38:35
我正在使用该库来实现学习代理。我已经生成了训练案例,但是我不确定不确定什么是验证和测试集。老师说:70%应该是培训用例,10%是测试用例,其余20%应该是验证用例。编辑我有此训练代码,但我不知道何时停止训练。  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编辑经过约20次训练迭代后,使用验证数据可以得出平均误差为0.2,应该是80%?平均误差=给定验证数据输入/验证数据的大小,验证目标与输出之间的绝对差之和。1        avg error 0.520395         validation        0.2469378826842        avg error 0.272367           validation        0.2288324208793        avg error 0.249578            validation        0.216253590304        ...22        avg error 0.227753        validation        0.20023924471423        avg error 0.227905            validation        0.199875013416
查看完整描述

3 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

假设您在训练集中训练模型,然后在测试集中测量模型的性能。您认为仍有改进的空间,请尝试调整超参数(如果模型是神经网络-超参数是层数或层中的节点)。现在,您可以获得更好的性能。但是,当模型接受其他数据(不在测试和训练集中)时,您可能无法获得相同水平的准确性。这是因为您在调整超参数时引入了一些偏差,以在测试集上获得更好的精度。您基本上已经对模型和超参数进行了调整,以针对该特定训练集生成最佳模型。

常见的解决方案是进一步拆分训练集以创建验证集。现在你有

  • 训练集

  • 测试装置

  • 验证集

您可以像以前一样进行操作,但是这次使用验证集测试性能并调整超参数。更具体地说,您可以在简化的训练集上(即完整的训练集减去验证集)训练具有各种超参数的多个模型,然后选择在验证集上表现最佳的模型。

在验证集上选择性能最佳的模型后,即可在完整的训练集(包括验证集)上训练最佳模型,这将为您提供最终模型。

最后,您在测试集上评估此最终模型,以获得对泛化误差的估计。


查看完整回答
反对 回复 2019-12-07
  • 3 回答
  • 0 关注
  • 3831 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信