【问题标题】:How does Keras handle backpropagation in multiple outputsKeras 如何处理多个输出中的反向传播
【发布时间】:2019-07-26 05:06:46
【问题描述】:

对于这样的网络架构:

          +---+   
input1--->| CNN | -------|
           +---+         |  
                         |
           +---+      +-------+          +-------+ 
input2--->| CNN | ----| Concat|-----|----|  VGG  |---- Main_out
           +---+      +-------+     |    +-------+   
                          |         |
           +---+          |         |
input3--->| CNN | --------|        Aux_out
           +---+   

反向传播流程如何?我的意思是,有两个反向传播步骤?或者来自Main_out 的唯一一个更新权重。

我正在为每个输出使用损失权重:

model.compile(loss="categorical_crossentropy",optimizer=OPT,metrics=["accuracy"],
            loss_weights={'main_output': 1., 'aux_output': 0.2}

【问题讨论】:

  • @MatiasValdenegro 当包含 aux_out 时,我有更好的 main_out 准确性。我知道 aux_out 可以帮助解决梯度消失问题。我只是想了解 Keras 在这种情况下如何处理反向传播。像前三个 CNN 权重会更新两次吗?一次从 main_out 更新,另一次从 aux-out 更新?

标签: keras deep-learning backpropagation


【解决方案1】:

根据loss_weights将不同输出的loss组合成最终的loss,

final_loss = loss_main + 0.2*loss_aux

参数将在每次迭代中通过一个反向传播步骤来更新与此损失相关的参数。

【讨论】:

  • 那么,有两个反向传播步骤具有相同的损失?一个来自 Main_out,另一个来自 Aux_out?
  • @JulesR 我已经编辑了答案,希望它更清楚
【解决方案2】:

(我无法发表评论,因为我没有足够的声誉,所以我将我的问题作为答案发布。对此我很抱歉,但我正在努力获取有关该主题的信息)

当我问同样的问题here 时,我也很难理解它是如何工作的;作为 JulesR,当使用另一个网络架构添加“aux_out”时,我有更好的“主要输出”准确性。

如果我理解 dontloo 的回应(如果我错了,请纠正我),尽管有多个输出,但只有一个反向传播,但使用的损失是根据输出加权的。那么对于 JulesR 的网络,反向传播过程中 VGG 权重的更新也会受到这种加权损失的影响(因此受到“中间输出”的影响)?如果是的话,VGG网络在这个输出之后是不是很奇怪?

另外,@JulesR 提到辅助输出可以帮助解决梯度消失问题。你有一些关于辅助输出效果的文章的链接吗?

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
相关资源
最近更新 更多