我有一个包含3个分类负责人[A, B, C]
的多任务网络。
我想将头A
的输出用作B and C
的第一密集层的输入。
对反向传播是否应该做一些特殊的事情,因为我认为从B and C
开始的梯度不应该流回A
,因为它已经被计算出来了,应该视为常数。
有人有这样的代码示例吗?
答案 0 :(得分:0)
您可以尝试:
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)