【问题标题】:Keras Binary Classifier Tutorial Example gives only 50% validation accuracyKeras 二元分类器教程示例仅提供 50% 的验证准确度
【发布时间】:2019-12-01 23:37:35
【问题描述】:

Keras 二元分类器教程示例仅提供 50% 的验证准确度。 接近 50% 的准确率可以从未经训练的分类器本身获得,用于二元分类。

这个例子直接来自https://keras.io/getting-started/sequential-model-guide/

import numpy as np
import tensorflow as tf

from tensorflow_core.python.keras.models import Sequential
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout

np.random.seed(10)

# Generate dummy data
x_train = np.random.random((1000, 20))
y_train = np.random.randint(2, size=(1000, 1))

x_test = np.random.random((800, 20))
y_test = np.random.randint(2, size=(800, 1))

model = Sequential()
model.add(Dense(64, input_dim=20, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

model.fit(x_train, y_train,
          epochs=50,
          batch_size=128,
          validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, batch_size=128)

准确度输出。

  • 我尝试了多次试验。
  • 增加了隐藏层的数量

纪元 50/50 1000/1000 [==============================] - 0s 211us/样本 - 损失:0.6905 - 准确度:0.5410 - val_loss:0.6959 - val_accuracy: 0.4812

有人可以帮助我了解这里是否有问题吗?

  • 如何提高教程中提出的这个“示例”问题的准确性?

【问题讨论】:

  • 嗯,你到底在尝试什么?用模型拟合随机数据?如果是这样的话,当然你会得到 50% 的准确率(对于二元分类问题)(除非你过度拟合模型——在这种情况下你会得到接近 100% 的训练数据准确率)。
  • 感谢您的澄清。是的,我意识到我的错误。我从教程中拿了一个例子,我被随机选取的测试数据集误导了。

标签: python tensorflow machine-learning keras


【解决方案1】:

如果您使用 random 示例训练分类器,您将始终得到 aprrox。此处以x_test 表示的验证数据的准确度为 50%。这是因为您的训练样本接受了随机类的训练。验证或测试集也已分配给随机类。这就是为什么会出现随机准确率(即 50-50%)的原因。 您测试训练集的 epoch 越多,您在 training 集上获得的准确度就越高,这是 overfitting 的影响。

【讨论】:

  • 谢谢!这有助于解释我的问题。我试图在X_train 上评估模型——我训练的数据。但是准确率仍然在 60% 左右,这让我很困惑。对于具有 1000 秒数据的简单二元分类器。对相同数据的训练和测试应达到 100% 的准确率。
  • @SenthilKumaran 不客气!我所看到的是,您在 X_test 上验证和评估,而不是在 X_train 上,您针对它训练模型。我错过了什么吗?
  • @SenthilKumaran 如果您在训练集上评估您的模型,那么您训练的 epoch 越多,准确率就会越高。由于它是一个随机数据集,没有实际的模式,这个过程会花费一些时间,所以只需增加 epoch 数。
  • 是的,没错。我的训练必须具有非常高的 epoch 值才能正确拟合我的“训练数据”本身。
猜你喜欢
  • 2019-01-03
  • 2018-08-16
  • 1970-01-01
  • 2021-08-03
  • 2019-05-09
  • 1970-01-01
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
相关资源
最近更新 更多