Keras如何处理多个输出中的反向传播

时间:2019-07-26 05:06:46

标签: keras deep-learning backpropagation

对于这样的网络体系结构:

          +---+   
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}

2 个答案:

答案 0 :(得分:2)

根据loss_weights

,不同输出的损失合并为最终损失
final_loss = loss_main + 0.2*loss_aux

将在每次迭代时通过一个反向传播步骤来针对此损耗更新参数。

答案 1 :(得分:1)

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

当我问相同的问题here时,我也很难理解它的工作方式;作为JulesR,使用其他网络体系结构添加“ aux_out”时,我具有更好的“主输出”精度。

如果我理解dontloo的响应(如果我错了,请纠正我),尽管有多个输出,但只有一次反向传播,但是根据输出对使用的损失进行加权。因此,对于JulesR的网络,反向传播期间VGG权重的更新也受此加权损失的影响(因此受“中间输出”的影响)吗?如果是,那么对于VGG网络在此输出之后的事实是否感到奇怪?

@JulesR还提到辅助输出可以帮助消除梯度问题。您是否有一些有关辅助输出效果的文章链接?