对于要向后传播的多个输出,我认为这不是FábioPerez提到的完整答案。
另外,在训练期间是什么意思? loss2是否仅用于更新y2来源的图层上的权重?还是将其用于模型的所有层?
对于输出C和输出D,keras将计算最终损耗F_loss = w1 * loss1 + w2 * loss2。然后,将最终的损耗F_loss应用于输出C和输出D。最后,使用相同的F_loss从输出C和输出D进行反向传播以反向传播。
0
对于要向后传播的多个输出,我认为这不是FábioPerez提到的完整答案。
另外,在训练期间是什么意思? loss2是否仅用于更新y2来源的图层上的权重?还是将其用于模型的所有层?
对于输出C和输出D,keras将计算最终损耗F_loss = w1 * loss1 + w2 * loss2。然后,将最终的损耗F_loss应用于输出C和输出D。最后,使用相同的F_loss从输出C和输出D进行反向传播以反向传播。
0
从model
文档中 :
loss :字符串(目标函数的名称)或目标函数。见损失。如果模型具有多个输出,则可以通过传递字典或损失列表来对每个输出使用不同的损失。然后,将由模型最小化的损失值将是所有单个损失的总和。
...
loss_weights :可选列表或字典,用于指定标量系数(Python浮点数)以加权不同模型输出的损耗贡献。然后,将由模型最小化的损失值将是所有单个损失的加权总和,并由
loss_weights
系数加权。如果是列表,则期望与模型的输出具有1:1映射。如果是张量,则期望将输出名称(字符串)映射到标量系数。
因此,是的,最终损失将是“所有损失的加权总和,由loss_weights
系数加权”。
另外,在训练期间是什么意思? loss2是否仅用于更新y2来源的图层上的权重?还是将其用于模型的所有层?
权重通过反向传播进行更新,因此每个损耗将仅影响将输入连接到损耗的层。
例如:
+----+
> C |-->loss1
/+----+
/
/
+----+ +----+/
-->| A |--->| B |\
+----+ +----+ \
\
\+----+
> D |-->loss2
+----+
loss1
将影响A,B和C。 loss2
将影响A,B和D。
0
如果我有类似的东西:
Keras如何处理损失以获得最终损失?是这样的吗?
另外,在训练期间是什么意思? loss2是否仅用于更新y2来源的图层上的权重?还是将其用于模型的所有层?