此U-net的后两层出了什么问题?

时间:2019-06-20 04:30:32

标签: machine-learning keras

我正在使用Keras构建一个用于解决两类图像分割问题的U网络。我大致遵循此处给出的示例:https://github.com/zhixuhao/unet。在该示例之后,解码器的最后几层(包括输出层)如下所示:

    up9 = UpSampling2D(size = (2,2))(conv8)
    merge9 = concatenate([conv1,up9], axis = 3)
    conv9 = Conv2D(16, 3, activation = 'relu', padding = 'same')(merge9)
    conv9 = Conv2D(16, 3, activation = 'relu', padding = 'same')(conv9)

    conv9 = Conv2D(2, 3, activation = 'relu', padding = 'same')(conv9)
    conv10 = Conv2D(1, 1, activation = 'sigmoid',padding='same')(conv9)

我发现的关键问题是删除此行时:

conv9 = Conv2D(2, 3, activation = 'relu', padding = 'same')(conv9)

然后,U-net根本无法训练(使用二进制交叉熵),并且鉴于我在其他地方看到几乎完全相同的U-net完全跳过了这一层,因此我无法弄清楚为什么需要这一层。

任何人都可以在这里说明为什么需要这一层吗?如果我要制作WAG,我想说这与以下事实有关:我们想使用2个过滤器来代表每个类?在这种情况下,它是否与预期的输出形状(128x128x1)有关?

0 个答案:

没有答案