我目前有一个keras模型,它使用完全卷积网络将每个像素分类为属于对象或背景。由于我只有2个类(对象或背景),我在输出层使用sigmoid激活并且binary_crossentropy丢失。
然而,对于几个图像,我不确定某些像素属于哪个类,因此我想将这些像素标记为无效,使得网络权重不会根据这些像素的预测进行更新。在Keras中是否有处理空白标签的方法?
一般来说,这样做的一种方法是为每个像素指定损失权重,并将空白像素的权重设置为0.(例如,对于张量流,like this)。我在Keras中使用sample_weights进行了调查,但我无法使用它,因为它似乎没有用于加权像素。
答案 0 :(得分:0)
事实证明,毕竟可以使用sample_weight。由于样本权重只能有2个维度(batch_size,没有预测),因此诀窍是将模型的输出重新整形为平坦。
我的模型定义的最后两行:
model.add(Reshape((-1, 1)))
model.compile(loss='binary_crossentropy', optimizer='adam', sample_weight_mode='temporal', metrics=['binary_accuracy'])
我使用Reshape(( - 1,1)),因为我的输入图像具有可变尺寸。当我训练模型时,我还必须使用扁平标签和sample_weight。
我找到了答案here。