【发布时间】:2020-05-14 18:19:14
【问题描述】:
我正在尝试在 keras 中进行多类分类。到目前为止,我正在使用 categorical_crossentropy 作为损失函数。但由于所需的指标是 weighted-f1,我不确定 categorical_crossentropy 是否是最佳损失选择。我试图使用 sklearn.metrics.f1_score 在 keras 中实现加权 f1 分数,但由于张量和标量之间的转换问题,我遇到了错误。
类似这样的:
def f1_loss(y_true, y_pred):
return 1 - f1_score(np.argmax(y_true, axis=1), np.argmax(y_pred, axis=1), average='weighted')
紧随其后
model.compile(loss=f1_loss, optimizer=opt)
如何在 keras 中编写这个损失函数?
编辑:
y_true 和 y_pred 的形状是 (n_samples, n_classes) 在我的例子中是 (n_samples, 4)
y_true 和 y_pred 都是 张量,所以 sklearn 的 f1_score 不能直接作用于它们。我需要一个计算张量的加权 f1 的函数。
【问题讨论】:
-
请张贴
y_true和y_pred的形状。 -
形状是 (n_samples, n_classes) 在我的例子中是 (n_samples, 4)
-
kaggle.com/rejpalcz/best-loss-function-for-f1-score-metric 这是为 2 个类实现的非加权 f1-loss
标签: python-3.x tensorflow keras scikit-learn