我有一个需要将网络分支并计算反向传播的情况。
网络结构如下:
/-- one-type-of-net-with-its-own-losscommon_couple_of_layers-- \-- another-type-of-net-with-its-own-loss
- 我是否只需要添加到集合中,计算梯度并更新?
- 还是在网络分支处(即梯度“重新汇聚”的地方)需要进行某种重新缩放?
- 或者需要归一化?
- 或者…?
- 还是TensorFlow在添加到损失集合时会自动处理这些?
谢谢
回答:
如果你使用的是“损失集合”(例如通过 tf.contrib.losses.add_loss()
或 tf.add_to_collection(tf.GraphKeys.LOSSES, ...)
),你可以使用 tf.contrib.losses.get_total_loss()
来获取一个单一的损失值,该值可以传递给标准的TensorFlow tf.train.Optimizer
子类。TensorFlow会为你的分支网络推导出适当的反向传播计算。