具有自定义损失功能的多输入多输出CNN

时间:2018-12-19 03:48:15

标签: tensorflow keras neural-network deep-learning conv-neural-network

我有一组2D输入数组m x n,即A,B,C,我必须预测两个2D输出数组,即d,e,但它们确实具有期望值。您可以根据需要将输入/输出视为灰色图像。

因为空间信息是相关的(实际上是2D物理域),所以我想使用卷积神经网络来预测de。我的设计(尚未测试)如下:

enter image description here

由于我有多个输入,我想我应该使用多个列(或分支)来为每个输入找到不同的功能(它们看起来完全不同)。这些列中的每一个都遵循分段中使用的编码-解码架构(请参见SegNet):Conv2D块涉及卷积+批处理归一化+ ReLU层。 Deconv2D涉及反卷积+批处理归一化+ ReLU。

然后,我可以通过级联,平均或取最大值来合并每列的输出。为了获得每个输出的原始m x n形状,我可以使用1 x 1内核卷积来实现。

我想预测该单层的两个输出。从网络结构的角度来看可以吗?最后,我的损失函数取决于与目标相比的输出本身以及我要施加的其他关系。

A希望对此有一些专家意见,因为这是我对CNN的第一个设计,因此我不确定现在是否应该这样做和/或是否有更好的方法(或网络体系结构)来解决这个问题。

我最初在datascience上发布了此内容,但没有得到太多反馈。我现在将其发布在这里,因为有一个关于这些主题的更大的社区,此外,我将非常感谢在网络体系结构方面获得实施技巧。谢谢。

2 个答案:

答案 0 :(得分:3)

我认为您的设计总的来说很合理:

  • 由于A,B和C截然不同,因此您要使每个输入成为一个转换子网,然后将它们融合在一起,这是您的中间表示形式。

  • 从中间表示中的
  • ,您应用附加的CNN分别解码D和E。

几件事:

  1. A,B和C看起来不同并不一定意味着您不能将它们堆叠为3通道输入。应根据以下事实做出决定:A,B和C中的值是否表示不同。例如,如果A是灰度图像,B是深度图,C也是另一个相机捕获的灰度图像。这样,A和B可以按照您建议的方式进行更好的处理,但是在将A和C馈送到网络之前,可以将A和C串联为一个输入。

  2. D和E是网络的两个输出,将以多任务方式进行训练。当然,它们应该共享一些潜在功能,并且应该在此功能上拆分以对每个输出应用下游非共享权重分支。但是,在哪里拆分通常很棘手。

答案 1 :(得分:1)

这确实是一个广泛的问题,主要依靠观点来寻求答案。不过,这是我的两分钱,您可能会发现这很有趣,因为它不符合此处以及有关数据科学的先前答案。

首先,我不会为每个输入使用单独的列。 AFAIK,当不同的输入由不同的列处理时,几乎总是这种网络是某种暹罗网络并且这些列共享相同的权重。或至少所有列都需要产生类似的代码。在这里不是您的情况,所以我不会打扰。

第二,您很幸运,因为输出密集,而且无需学习代码。这样就可以直接将您引向U-nets,它无需花费太多精力就能胜过任何瓶颈设计的网络。引入了U-net进行密集分割,但是它们确实可以解决任何密集输出问题。

简而言之,只需将您的输入堆叠在一起并使用U-net。