首页 > 解决方案 > 这个 U-net 的最后两层有什么问题?

问题描述

我正在使用 Keras 为两类图像分割问题构建 U-net。我大致遵循此处给出的示例: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)有关吗?

标签: machine-learningkeras

解决方案


推荐阅读