我写信给您是因为我有问题,与下面链接中的问题相同,但仍未得到答复。
我定义了一个损失函数,该函数排除所有像素= 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
是单点编码的蒙版。
答案 0 :(得分:0)
仅通过类加权就没有办法实现这一目标吗? 为您不感兴趣的班级设置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