在TensorF中使用验证集和不使用验证集拟合DNN的区别

2024-05-16 12:52:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python3.5中的TensorFlow构建模式识别深层神经网络。在构建网络并创建训练集之后,我使用TensorFlow中的以下函数训练模型:

model = tflearn.DNN(net, tensorboard_dir='tflearn_logs')
model.fit(train_x, train_y, n_epoch=2000, batch_size=8, show_metric=True)
model.save(name + '.tflearn')

当我对它从未见过的输入进行预测时,它的效果非常好。在阅读fit函数的Tflearn文档时,它说我可以将一个“validation_set”传递给该函数,顾名思义,它是用来验证我的模型的集合。在

传递验证集和不传递验证集有什么区别?在


Tags: 函数模型网络netmodeltensorflowdirtrain
2条回答

实际上,IMHO,验证集的命名非常混乱。通常,在机器学习或深度学习中,验证适用于用于超参数调整的数据集,例如DNN的层或每层的神经元数量或正则化的lambda值。所以它应该命名为测试集。在

但是不管怎样,在tflearn中指定验证集有两种方法。一种方法是用一个介于1到0之间的浮点数来传递它

model.fit(X, Y, validation_set=0.1)

这意味着fit方法将使用10%的训练数据来测试模型的性能,而只使用90%的原始训练数据集进行训练。在

或者您可以自己将数据集拆分为训练数据集和验证/测试数据集,并按如下方式传递:

^{pr2}$

有了验证集,你就可以自信地说,你的模型对于“看不见的”数据的准确性是多少,而不是使用诸如“当我对输入进行预测时,它的工作非常好,它从来没有见过”。另外,如果您发现模型在训练数据上的精确度比在验证数据集上高得多,您就知道您有一个过度拟合的问题,可以应用技术来解决它。在

在机器学习中,您将数据分成三部分:1-训练,2-验证,3-测试。然后通过学习列车数据的模型并测量验证数据的性能,尝试一系列不同的超参数(例如,在您的案例中,时间段的数量,或者网络中的层数……)。然后,选择使用最佳超参数训练的模型(根据验证集上的性能),并在测试数据上测量其性能,从而获得模型的准确性。 如果您不使用验证集并调整测试集上的超参数,则会被视为作弊,因为您可能会过度适应测试集(例如,有一个专门为测试集做出良好预测的模型)。在

相关问题 更多 >