使用估计值作为特征的多任务学习



我有一个多任务网络,[A, B, C]有 3 个分类头。我想使用头部A的输出作为B and C的第一个密集层的输入。

应该为反向传播做一些特别的事情,因为我认为B and C的梯度不应该流回A,因为它已经计算过并且应该作为常数处理。

有没有人有这样的东西的代码示例?

你可以试试:

A_layer = tf.keras.layers.Dense(5)(x)
A_head= tf.keras.layers.Dense(5)(A_layer)
A_logic = tf.keras.layers.Dense(1)(A_head)
A_loss = tf.losses.sigmoid_cross_entropy(A_y,A_logic)
B_layer = tf.keras.layers.Dense(5)(tf.stop_gradient(A_logic))
B_head= tf.keras.layers.Dense(5)(B_layer)
B_logic = tf.keras.layers.Dense(1)(B_head)
B_loss = tf.losses.sigmoid_cross_entropy(B_y,B_logic)
C_layer = tf.keras.layers.Dense(5)(tf.stop_gradient(A_logic))
C_head= tf.keras.layers.Dense(5)(C_layer)
C_logic = tf.keras.layers.Dense(1)(C_head)
C_loss = tf.losses.sigmoid_cross_entropy(C_y,C_logic)
total_loss = A_loss + B_loss + C_loss
train_op = tf.train.AdamOptimizer().minimize(total_loss)

最新更新