【发布时间】:2017-05-18 10:49:49
【问题描述】:
我正在构建一个自定义指标来衡量训练期间我的多类数据集中一个类的准确性。我在选择课程时遇到问题。
目标是一个热点(例如:类0 标签是[1 0 0 0 0]):
from keras import backend as K
def single_class_accuracy(y_true, y_pred):
idx = bool(y_true[:, 0]) # boolean mask for class 0
class_preds = y_pred[idx]
class_true = y_true[idx]
class_acc = K.mean(K.equal(K.argmax(class_true, axis=-1), K.argmax(class_preds, axis=-1))) # multi-class accuracy
return class_acc
问题是,我们必须使用 Keras 函数来索引张量。如何为张量创建布尔掩码?
【问题讨论】:
-
我不熟悉 Keras,不知道您的代码是否可以使用布尔掩码或显式索引。您是否将掩码转换为布尔类型? tf.cast(二进制掩码,tf.bool)。使用 Theano,您可以使用 bool_mask.nonzero() 来获取布尔掩码的索引。让我们知道此解决方案是否有效。
-
你会接受使用回调的答案吗?
-
只是为了确保 - y_true 是二维的?这里的行和列应该代表什么?
标签: python tensorflow neural-network keras