使用Tensorflow和Keras时,验证准确率高于训练准确率

我尝试使用深度学习从一个约会网站的15个自报属性来预测收入。

我们得到了一些相当奇怪的结果,验证数据的准确率和损失比训练数据更好,而且这种情况在不同大小的隐藏层中是一致的。这是我们的模型:

for hl1 in [250, 200, 150, 100, 75, 50, 25, 15, 10, 7]:    def baseline_model():        model = Sequential()        model.add(Dense(hl1, input_dim=299, kernel_initializer='normal', activation='relu', kernel_regularizer=regularizers.l1_l2(0.001)))        model.add(Dropout(0.5, seed=seed))        model.add(Dense(3, kernel_initializer='normal', activation='sigmoid'))        model.compile(loss='categorical_crossentropy', optimizer='adamax', metrics=['accuracy'])        return model    history_logs = LossHistory()    model = baseline_model()    history = model.fit(X, Y, validation_split=0.3, shuffle=False, epochs=50, batch_size=10, verbose=2, callbacks=[history_logs])

这是准确率和损失的一个例子:隐藏层为250个神经元的准确率损失

我们尝试过移除正则化和丢弃层,正如预期的那样,结果是过拟合(训练准确率约为85%)。我们甚至尝试过大幅降低学习率,结果相似。

有人见过类似的结果吗?


回答:

当你使用Dropout时会发生这种情况,因为训练和测试时的行为是不同的。

在训练时,部分特征会被设为零(在你的例子中是50%,因为你使用了Dropout(0.5))。在测试时,所有特征都会被使用(并适当缩放)。因此,测试时的模型更加robust – 这可能会导致更高的测试准确率。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注