我正在使用keras和TensorFlow进行多类图像分割。我训练有素的网络给了我很好的预测,但未能将触摸对象分开,这就是为什么我要使用具有softmax_cross_entropy
参数的"weights"
损失函数。
如何知道我的y_true
形状是(batch-size,128,128,3)
,我怎么能计算出这些重量?
tf.losses.softmax_cross_entropy(y_true,y_pred,weights=my_weights)
根据tf.losses.softmax_cross_entropy
的文档,您可以使用该参数来对每个批次中的样本进行不同的加权,并且它应该是形状batch_size
的张量。
weights
作为损失的系数。如果提供了标量,那么损失将简单地按给定值进行缩放。如果weights
是形状[batch_size]
的张量,那么损失权重适用于每个相应的样本。
但是,this answer显示了如何为每个类分配不同的权重(可能你有一个不平衡的数据集?)。我想这更像是你想要达到的目标。
您可以使用sklearn为不平衡数据集计算class weight。并使用这些计算出的参数在weights
中分配tf.losses.softmax_cross_entropy
。这有助于解决您的问题。