我打算构建一个具有多个输出层架构的神经网络。更具体地说,它被设计成在一系列卷积层之上构建并行程序。一个分支是计算分类结果(softmax-like);另一种是获得回归结果。但是,我一直在设计模型以及选择损失函数(标准)。
予。我是否应该将火炬容器DATE = (SELECT MAX(DATE) FROM table2 t2, table1 t1 WHERE t1.NAME = "aaa")
或nn.Parallel()
用于转换层(nn.Concat()
)顶部的分支图层?除数据格式外,有什么区别。
II。由于输出数据,分类损失函数和回归损失函数将线性组合。我想知道是否根据确定的容器选择nn.Sequential()
或nn.MultiCriterion()
。或者我必须自定义新的标准类。
III。任何做过类似工作的人都可以告诉我火炬是否需要额外的定制来实施backprop进行培训。我担心火炬容器的数据结构问题。
答案 0 :(得分:1)
Concat
vs Parallel
的不同之处在于Concat
中的每个模块都将最后一层的整个输出作为输入,而Parallel
的每个输入都需要最后一层输出的切片。出于您的目的,您需要Concat
,而不是Parallel
,因为两个损失函数都需要获取顺序网络的整个输出。
根据MultiCriterion
和ParallenCriterion
的源代码,它们几乎完全相同。重要的区别在于,在MultiCriterion
的情况下,您提供了多个损失函数,但只有一个目标,并且它们都是针对该目标计算的。鉴于您有分类和回归任务,我假设您有不同的目标,因此您需要ParallelCriterion(false)
,其中false
启用多目标模式(如果参数为true
{{1}似乎表现得与ParallelCriterion
相同。然后,MultiCriterion
应该是个人标准的目标表。
如果您使用target
和Concat
,火炬应该能够为您正确计算渐变。两个实现ParallelCriterion
,它们正确地合并了各个块的渐变。