【发布时间】:2020-04-23 20:42:16
【问题描述】:
我最近开始学习语义分割。我正在尝试为此训练 UNet。我的输入是 RGB 128x128x3 图像。我的面具由 0、1、2、3 4 类组成,并且是 One-Hot 编码的,尺寸为 128x128x4。
def weighted_cce(y_true, y_pred):
weights = []
t_inf = tf.convert_to_tensor(1e9, dtype = 'float32')
t_zero = tf.convert_to_tensor(0, dtype = 'int64')
for i in range(0, 4):
l = tf.argmax(y_true, axis = -1) == i
n = tf.cast(tf.math.count_nonzero(l), 'float32') + K.epsilon()
weights.append(n)
weights = [batch_size/j for j in weights]
y_pred /= K.sum(y_pred, axis=-1, keepdims=True)
# clip to prevent NaN's and Inf's
y_pred = K.clip(y_pred, K.epsilon(), 1 - K.epsilon())
# calc
loss = y_true * K.log(y_pred) * weights
loss = -K.sum(loss, -1)
return loss
这是我正在使用的损失函数,但它将每个像素分类为 2。我做错了什么?
【问题讨论】:
-
您能具体说明一下您的代码在做什么,什么有效,什么无效?只需在您的问题中添加更多文字,以便人们可以帮助您。
标签: tensorflow keras deep-learning image-segmentation semantic-segmentation