如何在使用Keras进行二分类时决定验证准确率的正确类别?

我一直在使用Keras进行二分类,采用Python中的Tensorflow后端。我的模型是这样的创建的:

model = Sequential()model.add(Dense(1000, input_dim=168319))model.add(Dense(units=1, activation='sigmoid'))model.compile(loss="binary_crossentropy",          optimizer="adam",          metrics=['accuracy'])

训练后的结果看起来像这样:

342/1342 [==============================] - 79s 59ms/step - loss: 0.0586 - acc: 0.9911 - val_loss: 0.4632 - val_acc: 0.8169

如果我使用我的网络来预测一个样本,它会给我一个在[0,1]之间的数,这也是应该的,因为我对输出神经元使用了sigmoid激活函数。我的输出在预测6个应该属于类别1的样本后的一个例子看起来像这样:

[[1.        ][1.        ][0.99997437][0.18694757][0.18712251][0.9491884 ]]

由于结果都是0到1之间的浮点数,我一直在想Keras是如何计算验证准确率的。验证准确率是用未用于训练的测试样本来测量的。如这里所提到的Keras如何计算验证准确率和训练准确率?,验证准确率是通过(正确猜测的数量)/(总猜测数量)计算的。

我的问题是,Keras如何决定猜测属于哪个类别,何时被认为是“正确”的。它是在0.5时向上取整吗?还是0到1之间的一切都被分类为“错误的猜测”(那么我期望验证准确率的数字会低得多)?


回答:

由于你使用的是binary_crossentropy,在这种情况下,你的六个类别是分别评估的。对于每个类别,大于0.5的值被设为1,小于0.5的值被设为0。如果你使用的是categorical_crossentropy,那么只有一个类别可以是1。哪个类别的概率最高就会被设为1,其余的将被设为0。如果你仔细想想,binary情况只是categorical情况的一个特殊情况。最高值被设为1。因此,只有当预测值大于0.5时,预测值才被设为1。

更多信息,请查看binary_accuracy,在github.com/keras-team/keras/blob/master/keras/metrics.py中。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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