繁体   English   中英

使用 Tensorflow 进行多任务深度学习

[英]Multitask deep learning with Tensorflow

有人试过用 TensorFlow 进行多任务深度学习吗? 也就是说,共享底层而不共享顶层。 一个带有简单插图的例子会有很大帮助。

有一个类似的问题在这里,答案使用keras。

仅使用 tensorflow 时也类似。 这个想法是这样的:我们可以定义网络的多个输出,从而定义多个损失函数(目标)。 然后我们告诉优化器最小化组合损失函数,通常使用线性组合。

概念图多任务深度学习图

该图是根据本文绘制的。

假设我们正在训练一个分类器来预测图像中的数字,每张图像最多 5 个数字。 在这里,我们定义6输出层: digit1digit2digit3digit4digit5length digit层应输出0〜9,如果有这样的位,或X在实践中的实数代替它),如果没有在其位置的任何数字。 length相同,如果图像包含 0~5 位,则应输出 0~5,如果包含超过 5 位,则应输出X

现在要训练它,我们只需将每个 softmax 函数的所有交叉熵损失相加:

# Define loss and optimizer
lossLength = tf.log(tf.clip_by_value(tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(length_logits, true_length)), 1e-37, 1e+37))
lossDigit1 = tf.log(tf.clip_by_value(tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(digit1_logits, true_digit1)), 1e-37, 1e+37))
lossDigit2 = tf.log(tf.clip_by_value(tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(digit2_logits, true_digit2)), 1e-37, 1e+37))
lossDigit3 = tf.log(tf.clip_by_value(tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(digit3_logits, true_digit3)), 1e-37, 1e+37))
lossDigit4 = tf.log(tf.clip_by_value(tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(digit4_logits, true_digit4)), 1e-37, 1e+37))
lossDigit5 = tf.log(tf.clip_by_value(tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(digit5_logits, true_digit5)), 1e-37, 1e+37))

cost = tf.add(
        tf.add(
        tf.add(
        tf.add(
        tf.add(cL,lossDigit1),
        lossDigit2),
        lossDigit3),
        lossDigit4),
        lossDigit5)

optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM