当前位置:  开发笔记 > 开发工具 > 正文

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

如何解决《使用Tensorflow进行多任务深度学习》经验,为你挑选了1个好方法。

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



1> xtt..:

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

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

概念图 多任务深度学习图

该图是根据本文绘制的.

假设我们正在训练一个预测图像中数字的分类器,每个图像最多5位数.在这里,我们定义6输出层:digit1,digit2,digit3,digit4,digit5,length.该digit层应该输出0〜9,如果有这样的位,或X(在实践中的实数代替它),如果没有任何数字在其位置上.同样的事情length,如果图像包含0~5位数,或者X包含5位以上的数字,则输出0~5 .

现在要训练它,我们只是加上每个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)

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有