【发布时间】:2021-08-26 08:20:56
【问题描述】:
假设您有一个包含 2 层 A 和 B 的神经网络。A 获取网络输入。 A 和 B 是连续的(A 的输出作为输入馈送到 B)。 A 和 B 都输出预测(预测 1 和预测 2)Picture of the described architecture 在第一层 (A) 和目标 (target1) 之后直接计算损失 (loss1)。您还可以使用自己的目标 (target2) 在第二层 (loss2) 之后计算损失。
使用 loss1 和 loss2 之和作为误差函数并在整个网络中反向传播这个损失是否有意义?如果是这样,为什么它“允许”通过 B 反向传播 loss1,即使它与它无关?
这个问题与这个问题有关 https://datascience.stackexchange.com/questions/37022/intuition-importance-of-intermediate-supervision-in-deep-learning 但它没有充分回答我的问题。 就我而言,A 和 B 是不相关的模块。在上述问题中,A 和 B 将是相同的。目标也是一样的。
(附加信息) 我问的原因是我试图从这个paper 中理解LCNN(https://github.com/zhou13/lcnn)。 LCNN 由 Hourglass 主干组成,然后将其输入到 MultiTask Learner(创建loss1),然后再输入到 LineVectorizer 模块(loss2)。然后将 loss1 和 loss2 相加here,然后通过整个网络反向传播here。
尽管我参加了几次深度学习讲座,但我并不知道这是“允许的”或有意义的做法。我本来希望使用两个loss.backward(),每个损失一个。或者 pytorch 计算图在这里做了什么神奇的事情? LCNN 收敛并优于其他试图解决相同任务的神经网络。
【问题讨论】:
标签: python tensorflow neural-network pytorch