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

时间:2019-04-06 07:28:54

标签: tensorflow keras neural-network

我有一个包含3个分类负责人[A, B, C]的多任务网络。 我想将头A的输出用作B and C的第一密集层的输入。

对反向传播是否应该做一些特殊的事情,因为我认为从B and C开始的梯度不应该流回A,因为它已经被计算出来了,应该视为常数。

有人有这样的代码示例吗?

1 个答案:

答案 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)