machine-learning - 这个 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)有关吗?
解决方案
推荐阅读
- php - 尽管我已经声明了变量,但出现未定义的变量错误
- rest - 使用 devMode 的 Apps 脚本执行 API 404 错误:true
- sql - 插入表 oracle
- java - 为什么在尝试使用 spring-data-jpa 锁定但未能获得锁定后关闭数据库连接?
- php - 自定义 WooCommerce 日期选择器结帐字段已保存并显示在订单和电子邮件中
- python - 在 Python 中,对象有自己的类变量副本吗?
- php - 尝试升级到 laravel 5.3,但我一直看到错误“调用未定义的方法 Illuminate\Auth\Access\Gate::abilities()”
- elasticsearch - 如何从弹性搜索中获取条件数据
- java - 由于会话选项无效,Android webrtc 无法创建报价
- php - 端口监听命令注入