【发布时间】:2018-11-01 18:47:08
【问题描述】:
我给你写信是因为我有一个问题,与下面链接中尚未回答的问题相同。
我已经定义了一个排除所有像素 = 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