Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在TensorFlow中使用验证集和不使用验证集拟合DNN之间的差异_Python_Machine Learning_Tensorflow_Neural Network - Fatal编程技术网

Python 在TensorFlow中使用验证集和不使用验证集拟合DNN之间的差异

Python 在TensorFlow中使用验证集和不使用验证集拟合DNN之间的差异,python,machine-learning,tensorflow,neural-network,Python,Machine Learning,Tensorflow,Neural Network,我正在使用Python 3.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') 当我对它从未见过的

我正在使用Python 3.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”,顾名思义,它是一个用于验证我的模型的集合


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

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

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

model.fit(X, Y, validation_set=0.1)
这意味着拟合方法将使用10%的训练数据来测试模型的性能,而仅使用90%的原始训练数据集进行训练

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

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

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

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

我理解,因此,它不是用于培训/优化过程,而是用于计算您刚刚完成的工作的置信度。我知道我要问的问题可能不太合适,但是:在整个训练过程中(验证集=0.1),val_loss和val_acc是恒定的,比如loss为2.8,acc为0.3,我是否应该认为我的模型不像我想的那样“很好”?@FrankB。你是说val_损失不会随着迭代而减少吗?这似乎不对。在迭代过程中,您的损失应该减少,您的价值损失也应该减少,至少在最初是这样。0.3 val_acc似乎也不正确。如果是二元分类,这意味着它比随机猜测更糟糕,因为随机猜测会给你50%的准确率。。。因为我的模型绝对不能作为精度为0.3的模型工作。。。