我必须在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')
; 以 - 使用
binary_crossentropy
代替categorical_crossentropy
[0,1]
为0
,[1,0]
为1
为例。否则,您可以实现一个特殊的回调来检索这些指标(使用scikit-learn
,如下例所示):
如何在Tensorflow 2.0中获得其他指标(不仅仅是准确性)?