首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在TensorFlow中用验证集拟合DNN与不使用验证集的区别

在TensorFlow中用验证集拟合DNN与不使用验证集的区别
EN

Stack Overflow用户
提问于 2017-09-11 18:26:09
回答 2查看 1.5K关注 0票数 2

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

代码语言:javascript
复制
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“传递给该函数,顾名思义,它是一个用来验证我的模型的集合。

通过验证集和不通过验证集有什么区别?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-11 19:05:15

实际上,验证集的命名是相当混乱的。通常,在机器学习或深度学习中,验证适用于用于超参数调优的数据集,例如DNN的层或每层的神经元数或正则化的lambda值。因此,它应该被命名为test_set。

但是无论如何,您有两种方法来指定tflearn中的验证集。一个是把它传递给介于1到0之间的浮点数。

代码语言:javascript
复制
model.fit(X, Y, validation_set=0.1)

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

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

代码语言:javascript
复制
model.fit(X_train, Y_train, validation_set=(X_test, Y_test))

使用验证集,您可以自信地告诉您的模型对于“未见”数据的准确性,而不是使用诸如“当我对从未见过的输入进行预测时工作得很好”之类的语句。此外,如果您发现模型对培训数据的准确性要比在验证数据集上高得多,您知道您有一个过度拟合的问题,并且可以应用技术来解决它。

票数 6
EN

Stack Overflow用户

发布于 2017-09-13 06:09:54

在机器学习中,你把你的数据分成三个部分: 1-训练,2-验证,3-测试.然后尝试一组不同的超参数(例如,在您的例子中的历元数,或者网络中的层数,.)通过学习列车数据模型,并对验证数据进行性能测试。然后,您选择使用最佳超参数(根据验证集上的性能)训练的模型,并根据您的测试数据来度量它的性能,从而给出模型的准确性。如果您不使用验证集并在测试集中调优您的超参数,那就被认为是欺骗,因为您可能会过度适应您的测试集(即,有一个专门为您的测试集进行良好预测的模型)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46162148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档