【发布时间】:2020-12-18 17:29:38
【问题描述】:
我使用 Keras 创建了一个简单的二元分类模型。代码是:
# 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'])
我的目的是检查accuracy 和binary_accuracy 的结果,了解它们之间的区别。
正如 Keras 所说,binary_accuracy 准确度有阈值,默认为.5,而“准确度”没有。当我用样本数据测试它们时,结果是不同的,但在模型的训练中,你在每个时期都有相同的结果。
对于这个真实的和预测的样本,我测试了accuracy 和binary_accuracy:
y_true = [[1], [1], [0], [0]]
y_pred = [[0.51], [1], [0], [0.4]]
对于binary_accuracy 是:
m = tf.keras.metrics.BinaryAccuracy()
m.update_state(y_true, y_pred)
m.result().numpy()
结果是:
1
对于accuracy 是:
m = tf.keras.metrics.Accuracy()
m.update_state(y_true, y_pred)
m.result().numpy()
结果是: '.5'
但在上述模型中,每个时期的每个人都是相同的。
编辑
通过将编译更改为这个,结果发生了变化:
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy', tf.keras.metrics.BinaryAccuracy(threshold=.7)])
为什么accuracy 像binary_accuracy 一样工作,threshold=0.5 在模型中而不在模型外?
【问题讨论】:
标签: tensorflow keras classification