【发布时间】:2019-01-04 14:44:17
【问题描述】:
我已经看到了这个问题的各种变体,但仍在努力正确地实施它。我有大脑 MRI 图像,带有 4 类(0-背景、1-组织类型 1、2-组织类型 2、3-莫名其妙跳过和 4-组织类型 4...BrATs 数据集)的真实分段掩码)
我实现了一个基本的 U-Net 架构,但在将其扩展到非二进制分类时遇到了麻烦。特别是损失函数。
这是我已经实现的,但我显然忽略了重要的细节:
[...]
output = tf.layers.conv2d_transpose(
conv18,
filters=5,
kernel_size=1,
strides=1,
padding='same',
data_format='channels_last',
activation=None,
use_bias=True,
kernel_initializer=None,
bias_initializer=tf.zeros_initializer(),
kernel_regularizer=tf.contrib.layers.l2_regularizer(reg),
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None,
trainable=True,
name='output',
reuse=None
)
我认为 (0,1,2,3,4) 可能的掩码值的 5 个过滤器是正确的。然后我使用了以下损失函数:
loss = tf.nn.sparse_softmax_cross_entropy_with_logits(
_sentinel=None,
labels=label,
logits=output,
name='cross_ent_loss'
)
return tf.reduce_mean(loss)
logits 将通过上面的输出传递,标签将是我的堆叠掩码图像 [n_batch, x_dim, y_dim, 1]。查看文档,我知道我没有将标签传递给正确的张量。
我是否正确地处理了这件事?如何使用包含在 1 个掩码图像中的多类标签来实现损失?
【问题讨论】:
标签: python tensorflow conv-neural-network image-segmentation