我正在使用该库来实现学习代理。我已经生成了训练案例,但是我不确定不确定什么是验证和测试集。老师说: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个赞
假设您在训练集中训练模型,然后在测试集中测量模型的性能。您认为仍有改进的空间,请尝试调整超参数(如果模型是神经网络-超参数是层数或层中的节点)。现在,您可以获得更好的性能。但是,当模型接受其他数据(不在测试和训练集中)时,您可能无法获得相同水平的准确性。这是因为您在调整超参数时引入了一些偏差,以在测试集上获得更好的精度。您基本上已经对模型和超参数进行了调整,以针对该特定训练集生成最佳模型。
常见的解决方案是进一步拆分训练集以创建验证集。现在你有
训练集
测试装置
验证集
您可以像以前一样进行操作,但是这次使用验证集测试性能并调整超参数。更具体地说,您可以在简化的训练集上(即完整的训练集减去验证集)训练具有各种超参数的多个模型,然后选择在验证集上表现最佳的模型。
在验证集上选择性能最佳的模型后,即可在完整的训练集(包括验证集)上训练最佳模型,这将为您提供最终模型。
最后,您在测试集上评估此最终模型,以获得对泛化误差的估计。
- 3 回答
- 0 关注
- 3831 浏览
添加回答
举报
0/150
提交
取消