我正在使用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/step
m_acc: [0.5690245978371045, 0.9523557437797776]
1889/1889 [==============================] - 1s 352us/step
m_recall: [0.24519687695911097, 0.9359449444150344]
1889/1889 [==============================] - 1s 350us/step
m_f1: [0.502442331737344, 0.9216516675489677]
1889/1889 [==============================] - 1s 360us/step
metric name: ['loss', 'acc']在测试期间,loss的含义/用法是什么?为什么它这么高(例如0.5690 in m_acc)?准确性评估对我来说似乎很好(例如,0.9523 in m_acc),但我也担心loss,它是否会使我的模型表现糟糕?
P.S. m_acc,m_recall等就是我给我的模型命名的方式(他们在GridSearchCV中接受了不同的度量)
更新:我刚刚意识到loss值不是百分比,那么它们是如何计算的呢?对于当前的价值观,它们是否足够好,还是我需要更多地优化它们?
进一步阅读的建议也很感谢!
发布于 2018-11-27 10:28:13
在定义机器学习模型时,我们希望有一种方法来衡量模型的性能,以便与其他模型进行比较,选择最优的模型,并确保其足够好。因此,我们定义了一些度量标准,如精度(在分类上下文中),即模型正确分类样本的比例,以衡量我们的模型的性能以及它是否适合我们的任务。
尽管我们确实可以理解这些度量标准,但问题是模型的学习过程不能直接使用它们来调整模型的参数。相反,我们定义了其他的度量,通常称为损失函数或目标函数,它们可以被训练过程直接使用(即优化)。这些函数的定义通常是这样的:当它们的值较低时,我们就会得到很高的精度。这就是为什么你通常会看到机器学习算法试图最小化一个损失函数,并期望提高精度。换句话说,模型是通过优化损失函数间接学习。损失值在模型的训练过程中很重要,例如,如果它们没有下降或波动,这就意味着有一个问题需要解决。
因此,我们最终(即在测试模型时)关注的是我们最初定义的度量的价值(比如准确性),我们并不关心损失函数的最终价值。这就是为什么您没有听到“数据集上特定模型的损失值为8.732”的原因!这并不能告诉你模型是伟大的,好的,坏的还是可怕的。相反,您会听到“此模型在数据集上以87%的精度执行”。
https://stackoverflow.com/questions/53494627
复制相似问题