首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么角点的准确性和binary_accuracy有相同的结果?

为什么角点的准确性和binary_accuracy有相同的结果?
EN

Stack Overflow用户
提问于 2020-12-18 17:29:38
回答 1查看 6.1K关注 0票数 6

我用Keras创建了一个简单的二进制分类模型。守则是:

代码语言:javascript
运行
复制
    # create model
    model = Sequential()
    model.add(Dense(250, input_dim=1, activation='relu'))
    model.add(Dense(1, activation='sigmoid'))
    # Compile model
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy', 'binary_accuracy'])

我的目的是检查accuracybinary_accuracy的结果是否理解他们之间的差异。

正如Keras说的,binary_accuracy精度有一个阈值,缺省值是.5,而‘精度’没有。当我用样本数据测试它们时,结果是不同的,但是在模型的过程中,您在每个时代都有相同的结果。

对于这个真实和预测的样本,我测试了accuracybinary_accuracy

代码语言:javascript
运行
复制
   y_true = [[1], [1], [0], [0]]
   y_pred = [[0.51], [1], [0], [0.4]]

对于binary_accuracy是:

代码语言:javascript
运行
复制
m = tf.keras.metrics.BinaryAccuracy()
m.update_state(y_true, y_pred)
m.result().numpy()

结果是:1

对于accuracy是:

代码语言:javascript
运行
复制
m = tf.keras.metrics.Accuracy()
m.update_state(y_true, y_pred)
m.result().numpy()

结果是:“.5”

但在上述模型中,每个时代的情况都是相同的。

编辑

通过将编译更改为此,结果更改如下:

代码语言:javascript
运行
复制
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy', tf.keras.metrics.BinaryAccuracy(threshold=.7)])

为什么accuracy在模型中像binary_accuracy一样使用threshold=0.5,而在模型之外却不像threshold=0.5

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-18 17:52:53

根据tf.keras.Model.compile()文档:

在传递字符串“精度”或“acc”时,根据所使用的损失函数和模型输出形状,将其转换为tf.keras.metrics.BinaryAccuracy、tf.keras.metrics.CategoricalAccuracy、tf.keras.metrics.SparseCategoricalAccuracy中的一个。我们也对字符串‘交叉熵’和'ce‘进行了类似的转换。

在您的示例中,它被转换为BinaryAccuracy,因此结果是相同的。

然而,tf.keras.metrics.Accuracy是完全不同的东西。如果您阅读了这些文档:

计算预测等于标签的频率。

这意味着它会查看y_predy_true的唯一值,并将每个唯一的值作为一个不同的标签对待。在您的示例中,0.51和0.4被视为单独的标签,因为它们分别不等于1和0,因此得到0.5

很抱歉,最初将此问题标记为重复,tf.keras中的行为与keras包中的行为不同。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65361359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档