猿问

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

我正在使用该库来实现学习代理。


我已经生成了训练案例,但是我不确定不确定什么是验证和测试集。

老师说:


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.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


有只小跳蛙
浏览 3832回答 3
3回答

慕码人8056858

假设您在训练集中训练模型,然后在测试集中测量模型的性能。您认为仍有改进的空间,请尝试调整超参数(如果模型是神经网络-超参数是层数或层中的节点)。现在,您可以获得更好的性能。但是,当模型接受其他数据(不在测试和训练集中)时,您可能无法获得相同水平的准确性。这是因为您在调整超参数时引入了一些偏差,以在测试集上获得更好的精度。您基本上已经对模型和超参数进行了调整,以针对该特定训练集生成最佳模型。常见的解决方案是进一步拆分训练集以创建验证集。现在你有训练集测试装置验证集您可以像以前一样进行操作,但是这次使用验证集测试性能并调整超参数。更具体地说,您可以在简化的训练集上(即完整的训练集减去验证集)训练具有各种超参数的多个模型,然后选择在验证集上表现最佳的模型。在验证集上选择性能最佳的模型后,即可在完整的训练集(包括验证集)上训练最佳模型,这将为您提供最终模型。最后,您在测试集上评估此最终模型,以获得对泛化误差的估计。
随时随地看视频慕课网APP

相关分类

人工智能
我要回答