在Keras模型评估中的损失

我在使用Keras进行二元分类,设置了loss='binary_crossentropy'optimizer=tf.keras.optimizers.Adam,最后一层是keras.layers.Dense(1, activation=tf.nn.sigmoid)

据我所知,loss值用于评估模型在训练阶段的表现。然而,当我对测试数据集使用Keras模型评估(例如m_recall.evaluate(testData,testLabel))时,也会得到loss值,并伴随accuracy值,如下输出所示

test size:  (1889, 18525)1889/1889 [==============================] - 1s 345us/stepm_acc:  [0.5690245978371045, 0.9523557437797776]1889/1889 [==============================] - 1s 352us/stepm_recall:  [0.24519687695911097, 0.9359449444150344]1889/1889 [==============================] - 1s 350us/stepm_f1:  [0.502442331737344, 0.9216516675489677]1889/1889 [==============================] - 1s 360us/stepmetric name:  ['loss', 'acc']

在测试期间,loss的意义和用途是什么?为什么它的值会这么高(例如m_acc中的0.5690)?对我来说,准确率评估似乎还可以(例如m_acc中的0.9523),但我也担心loss值,这会不会让我的模型表现不佳?

附注:m_accm_recall等只是我给模型命名的方式(它们是在GridSearchCV中用不同指标训练的)

更新:我刚刚意识到loss值不是以百分比表示的,那么它们是如何计算的?以当前的值来看,它们足够好吗,还是需要进一步优化?

也欢迎提供进一步阅读的建议!


回答:

在定义机器学习模型时,我们希望有办法衡量模型的表现,以便将其与其他模型进行比较,选择最佳模型,并确保其足够好。因此,我们定义了一些指标,如分类中的准确率,这是模型正确分类样本的比例,用来衡量模型的表现以及是否适合我们的任务。

虽然这些指标确实能被我们理解,但问题是它们不能直接用于模型的学习过程来调整模型参数。相反,我们定义了其他措施,通常称为损失函数目标函数,它们可以直接用于训练过程(即优化)。这些函数通常定义为当它们的值低时,我们期望准确率会高。这就是为什么你通常会看到机器学习算法试图最小化损失函数,期望准确率提高。换句话说,模型是通过优化损失函数间接学习的。损失值在模型训练期间很重要,例如,如果它们没有减少或波动不定,那么这意味着某处有问题需要解决。

因此,我们最终(即在测试模型时)关心的实际上是我们最初定义的指标值(如准确率),而不是损失函数的最终值。这就是为什么你不会听到诸如“某模型在ImageNet数据集上的损失值是8.732”这样的说法!这并不能告诉你模型是优秀、好、差还是糟糕。相反,你会听到“这个模型在ImageNet数据集上的表现准确率为87%”。

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

发表回复

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