【问题标题】:Define a custom accuracy in Keras to ignore samples with a particular label在 Keras 中定义自定义精度以忽略具有特定标签的样本
【发布时间】:2018-11-01 18:47:08
【问题描述】:

我给你写信是因为我有一个问题,与下面链接中尚未回答的问题相同。

Previous question

我已经定义了一个排除所有像素 = 0 的损失函数:

def ignore_unknown_xentropy(ytrue, ypred):
    return (1-ytrue[:, :, :, 0]) * K.categorical_crossentropy(ytrue, ypred)

我注意到在训练过程中准确度被扭曲了,我会考虑之前排除的等于零的像素。

有一种方法可以定义自定义指标以从计算中排除y_true 上的零像素?

我正在使用这种方法,即计算每个相关标签的准确性并添加它们,但它并没有给我可靠的结果:

def single_class_accuracy(y_true, y_pred, class_id):
    class_id_true = K.argmax(y_true, axis=-1)
    class_id_preds = K.argmax(y_pred, axis=-1)
    accuracy_mask = K.cast(K.equal(class_id_preds, class_id), 'int32')
    class_acc_tensor = K.cast(K.equal(class_id_true, class_id_preds), 'int32') * accuracy_mask
    class_acc = K.sum(class_acc_tensor) / K.maximum(K.sum(accuracy_mask), 1)
    return class_acc

def custom_accuracy(y_true, y_pred):
    return single_class_accuracy(y_true, y_pred, 1) + single_class_accuracy(y_true, y_pred, 2)

而我的ytrue 是一个单热编码掩码。

【问题讨论】:

  • 你的ytrue是什么(什么形状,尺寸说明)。我想您正在对每个像素进行分类(分割问题),对吧?
  • 我的 ytrue 是 one-hot 编码掩码,你是对的,这是一个分割问题,所以我对每个像素进行分类,但那些为零的像素在计算损失和精度的计算

标签: python tensorflow keras


【解决方案1】:

有没有办法仅通过类权重来实现这一点? 为您不感兴趣的课程设置 0? 我可能误解了,但这种方法对我来说很重要(忽略零级):

class_weights = {0.0:0.2,0.2:0.2:0.2}
history=model.fit(x=in_train,y=target_train,class_weight=class_weights,
              validation_data=.... etc

【讨论】:

  • 我正在使用一个巨大的训练集,所以我无法将它加载到内存中,我选择了 fit_generator () (也许这不是我不是专家的最佳方法)当我设置 class_weight = {0: 0.0, 1: 0.5, 2: 0.5} 它给了我这个错误:ValueError: class_weight not supported for 3+ Dimension targets。
猜你喜欢
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
  • 2019-04-15
相关资源
最近更新 更多