tensorflow - 具有自定义损失函数的多输入多输出 CNN
问题描述
我有一组 2D 输入数组,我必须预测两个 2D 输出数组,即m x n
我确实有预期值。如果您愿意,您可以将输入/输出视为灰色图像。A,B,C
d,e
由于空间信息是相关的(这些实际上是 2D 物理域),我想使用卷积神经网络来预测d
和e
。我的设计(尚未测试)如下所示:
因为我有多个输入,我想我应该使用多个列(或分支)来为每个输入找到不同的特征(它们看起来完全不同)。这些列中的每一列都遵循分割中使用的编码-解码架构(参见 SegNet):Conv2D 块涉及卷积+批量标准化+ReLU 层。Deconv2D 涉及反卷积+批量归一化+ReLU。
然后,我可以通过连接、平均或取最大值来合并每一列的输出。m x n
为了获得我见过的每个输出的原始形状,我可以使用1 x 1
内核卷积来做到这一点。
我想预测该单层的两个输出。从网络结构的角度来看,这可以吗?最后,我的损失函数取决于与目标相比的输出本身以及我想要强加的另一个关系。
A 想对此发表一些专家意见,因为这是我的第一个 CNN 设计,我不确定它是否像现在这样有意义和/或是否有更好的方法(或网络架构)来解决这个问题。
我最初在数据科学中发布了这个,但没有得到太多反馈。我现在在这里发布它,因为在这些主题上有一个更大的社区,而且我将非常感谢收到除了网络架构之外的实施技巧。谢谢。
解决方案
我认为您的设计总体上是有意义的:
由于 A、B 和 C 完全不同,因此您将每个输入设为一个变换子网络,然后将它们融合在一起,这就是您的中间表示。
从中间表示中,您应用额外的 CNN 来分别解码 D 和 E。
几件事:
A、B 和 C 看起来不同并不一定意味着您不能将它们堆叠在一起作为 3 通道输入。应根据 A、B 和 C 中的值是否具有不同含义这一事实做出决定。例如,如果 A 是灰度图像,B 是深度图,C 也是由不同相机捕获的灰度图像。然后以您建议的方式更好地处理 A 和 B,但是 A 和 C 在将其馈送到您的网络之前可以连接为一个输入。
D 和 E 是网络的两个输出,将以多任务方式进行训练。当然,它们应该共享一些潜在特征,并且应该在这个特征上进行拆分,以便为每个输出应用一个下游非共享权重分支。但是,在哪里拆分通常很棘手。
推荐阅读
- networking - 为什么我在使用wireshark 捕获包时收到了不止一个客户端的问候?
- sql-server - 使用 xs:element 命名空间标签选择 xml 格式的 SQL Server 表内容
- python - WSO2 api 管理器未将上传的多个文件发送到后端服务器
- sql-server - SQL Server 组行号
- c++ - C++ 指针表示法
- javascript - Javascript / JQuery 从表上的输入框中获取值
- php - 将部分 json 对象插入数据库仅插入一个括号
- .net-core - 在应用程序启动时设置 Hangfire 循环作业时出错
- cassandra - 如何将昨天的 Cassandra 数据复制到 csv
- python - 接收一个字母并将该字母向右旋转 13 位的 Python 函数