用于图像分割的Tensorflow:批量标准化的性能最差

用于图像分割的Tensorflow:批量标准化的性能最差,tensorflow,deep-learning,image-segmentation,batch-normalization,Tensorflow,Deep Learning,Image Segmentation,Batch Normalization,我用TensorFlow来解决一个多目标回归问题。具体而言,在全卷积残差网络中,用于像素级标记,输入为图像,标记为掩模。在我的例子中,我使用脑磁共振成像作为图像,标签是肿瘤的面具 我使用我的网络取得了相当不错的成绩: 虽然我确信仍有改进的余地。因此,我想添加批处理规范化。我的实施如下: # Convolutional Layer 1 Z10 = tf.nn.conv2d(X, W_conv10, strides = [1, 1, 1, 1], padding='SAME') Z10 = tf.

我用TensorFlow来解决一个多目标回归问题。具体而言,在全卷积残差网络中,用于像素级标记,输入为图像,标记为掩模。在我的例子中,我使用脑磁共振成像作为图像,标签是肿瘤的面具

我使用我的网络取得了相当不错的成绩:

虽然我确信仍有改进的余地。因此,我想添加批处理规范化。我的实施如下:

# Convolutional Layer 1
Z10 = tf.nn.conv2d(X, W_conv10, strides = [1, 1, 1, 1], padding='SAME')
Z10 = tf.contrib.layers.batch_norm(Z10, center=True, scale=True, is_training = train_flag)
A10 = tf.nn.relu(Z10)
Z1 = tf.nn.conv2d(Z10, W_conv1, strides = [1, 2, 2, 1], padding='SAME')
Z1 = tf.contrib.layers.batch_norm(Z1, center=True, scale=True, is_training = train_flag)
A1 = tf.nn.relu(Z1)
对于我的网络中的每一层conv和transpose。但结果并不是我所期望的。具有批处理规范化的网络具有糟糕的性能。橙色表示未进行批量标准化的净损失,而蓝色表示:

不仅网络学习速度较慢,而且使用批处理规范化的网络中预测的标签也非常糟糕

有人知道为什么会这样吗? 这可能是我的成本函数吗?我目前正在使用

loss=tf.nn.sigmoid\u cross\u entropy\u与logits(logits=dA1,labels=Y)

cost=tf.reduce_mean(loss)

这可能是一个天真的猜测,但可能您的批量太小了。如果批处理足够大,可以表示层的输入值的分布,那么规范化可能会很好。如果批次太小,则规范化可能会丢失信息。
在语义分段任务中,我也遇到了批规格化问题,因为批大小必须很小(对于与通过网络传递的语义信息相关的任务来说,批量规范化是一个糟糕的规范化选择。请研究条件规范化方法-自适应实例规范化等,以了解我的观点。此外,本文-。批量规范化洗掉了网络的所有语义信息。

FCN-8体系结构上的ried批量标准化,使用PASCAL VOC2012数据集。 正如上面其他人所提到的,它产生了糟糕的结果,但是没有批量规范化层,模型表现良好。我对网络表现不佳的一个假设是,在解码器架构中,我们主要关注以可学习的方式使用CNN作为媒介对特征空间进行上采样,因为特征映射因为问题是在提取特征的基本网络末端执行的1x1 conv中设置的

我们甚至将编码器输出的前几层添加到解码器(灵感来自resnet架构),这样做的原因是为了减少更深层次架构中消失梯度问题的影响

当我们想要从图片或图片的子区域预测某些类时,批处理规范化非常有效,因为在那里我们没有解码器架构来对预测的特征空间进行上采样


如果我错了,请纠正我。

Hi@ewbasso,谢谢你的建议。我一直在尝试更改小批量大小,但结果很糟糕。[参见问题]()关于更改批量大小为什么会停止拉宁过程,你有什么建议吗?