召回率和精度不能正常工作(keras)



我必须在keras中构建一个模型。我真的在努力与我的实际数据集,因此我只是试图找出一个更简单的数据集的基础知识。

model = Sequential([
Dense(32, input_dim=X_train.shape[1], activation="sigmoid"),
Dense(2, activation="softmax"),
])
metrics=[ 
tf.keras.metrics.TruePositives(name="tp"),
tf.keras.metrics.TrueNegatives(name="tn"),
tf.keras.metrics.FalseNegatives(name="fn"),
tf.keras.metrics.FalsePositives(name="fp"),
tf.keras.metrics.Recall(name="recall"),
tf.keras.metrics.Precision(name="precision")
]
model.compile(loss="categorical_crossentropy", metrics=metrics, optimizer="sgd")
model.evaluate(X_test, y_test)
evaluation = model.evaluate(X_test, y_test)
for i, m in model.metrics_names:
print(m, evaluation[i])

打印出来:

loss 0.4604386021425058
tp 2965.5
tn 2965.5
fn 531.25
fp 531.25
recall 0.8480753898620605
precision 0.8480753898620605

这个结果真的很奇怪。我认为这是由于使用softmax与两个节点。

y_train看起来像这样:

array([[1., 0.],
[1., 0.],
[1., 0.],
[1., 0.]], dtype=float32)

我尝试了一个s型,但后来整个模型崩溃了,至少这里的拟合工作。

是否有一种方法来配置召回率和精度,使他们认为一个输出笔记是积极的?

在你的情况下,唯一的解决方案是将问题转化为一维问题,即

  • Dense(1,activation='sigmoid')代替Dense(2,activation='softmax');
  • [0,1]0,[1,0]1为例。
  • 使用binary_crossentropy代替categorical_crossentropy

否则,您可以实现一个特殊的回调来检索这些指标(使用scikit-learn,如下例所示):

如何在Tensorflow 2.0中获得其他指标(不仅仅是准确性)?

最新更新