多输出层神经网络的Torch实现

Torch implementation of multi-output-layer neural network

我将构建一个具有多个输出层架构的神经网络。更具体地说,它旨在在一系列卷积层之上构建并行程序。一个分支是计算class化结果(类似softmax);另一种是得到回归结果。但是,我一直在设计模型以及选择损失函数(标准)。

我。我应该为转换层 (nn.Sequential()) 之上的分支层使用火炬容器 nn.Parallel() 还是 nn.Concat()?除了数据格式外,有什么不同。

二.由于输出数据,要线性组合一个class化损失函数和一个回归损失函数。我想知道是否要针对确定的容器选择 nn.MultiCriterion()nn.ParallelCriterion()。或者我必须自定义一个新标准 class.

三。做过类似工作的任何人都可以告诉我火炬是否需要额外的定制来实施反向传播以进行训练。我担心火炬容器的数据结构问题。

  1. ConcatParallel 的不同之处在于 Concat 中的每个模块都将最后一层的整个输出作为输入,而 [=11 中的每个输入=] 获取最后一层输出的一部分。为了您的目的,您需要 Concat,而不是 Parallel,因为两个损失函数都需要获取顺序网络的全部输出。

  2. 基于 MultiCriterionParallenCriterion 的源代码,它们实际上做同样的事情。重要的区别在于,在 MultiCriterion 的情况下,您提供了多个损失函数,但只有一个目标,并且它们都是针对该目标计算的。鉴于你有一个分类和一个回归任务,我假设你有不同的目标,所以你需要 ParallelCriterion(false),其中 false 启用多目标模式(如果参数是 true ParallelCriterion 的行为似乎与 MultiCriterion) 相同。那么 target 预计将成为 table 个针对个别标准的目标。

  3. 如果您使用 ConcatParallelCriterion,torch 应该能够为您正确计算梯度。两者都实现了 updateGradInput,它正确地合并了各个块的梯度。