在TensorFlow中将DNN与验证集进行拟合之间的区别

时间:2017-09-11 18:26:10

标签: python machine-learning tensorflow neural-network

我正在使用Python 3.5中的TensorFlow构建模式识别Deep Neural Network。在构建我的网并创建我的训练集之后,我使用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”,顾名思义它是用于验证我的模型的集合。

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

2 个答案:

答案 0 :(得分:3)

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

但无论如何,您有两种方法可以在tflearn中指定验证集。一种是将它传递给1到0之间的浮点数

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

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

或者您可以自己将数据集自行拆分为训练数据集和验证/测试数据集,并将其传递到下面:

model.fit(X_train, Y_train, validation_set=(X_test, Y_test))

通过验证集,您可以放心地说出您的模型的准确性是什么"看不见"数据,而不是使用诸如" 之类的语句,当我对从未见过的输入做出预测时,它的效果非常好。"。此外,如果您发现训练数据的模型准确性远高于验证数据集,您知道您有一个过度拟合的问题,并且可以应用技术来解决它。

答案 1 :(得分:0)

在机器学习中,您将数据分为三个部分:1-列车,2-验证,3-测试。然后通过学习列车数据模型并测量验证数据的性能,尝试一堆不同的超参数(例如,您的案例中的时期数,或网络中的层数,......)。然后,您选择使用最佳超参数训练的模型(根据验证集上的性能),并测量其在测试数据上的性能,为您提供模型的准确性。 如果你没有使用验证集并在你的测试集上调整你的超参数,那就被认为是作弊,因为你可能过度适应你的测试集(即有一个专门为你的测试集做出好预测的模型)。 p>