我正在使用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“传递给该函数,顾名思义,它是一个用来验证我的模型的集合。
通过验证集和不通过验证集有什么区别?
发布于 2017-09-11 19:05:15
实际上,验证集的命名是相当混乱的。通常,在机器学习或深度学习中,验证适用于用于超参数调优的数据集,例如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))使用验证集,您可以自信地告诉您的模型对于“未见”数据的准确性,而不是使用诸如“当我对从未见过的输入进行预测时工作得很好”之类的语句。此外,如果您发现模型对培训数据的准确性要比在验证数据集上高得多,您知道您有一个过度拟合的问题,并且可以应用技术来解决它。
发布于 2017-09-13 06:09:54
在机器学习中,你把你的数据分成三个部分: 1-训练,2-验证,3-测试.然后尝试一组不同的超参数(例如,在您的例子中的历元数,或者网络中的层数,.)通过学习列车数据模型,并对验证数据进行性能测试。然后,您选择使用最佳超参数(根据验证集上的性能)训练的模型,并根据您的测试数据来度量它的性能,从而给出模型的准确性。如果您不使用验证集并在测试集中调优您的超参数,那就被认为是欺骗,因为您可能会过度适应您的测试集(即,有一个专门为您的测试集进行良好预测的模型)。
https://stackoverflow.com/questions/46162148
复制相似问题