【问题标题】:Multitask deep learning with Tensorflow使用 Tensorflow 进行多任务深度学习
【发布时间】:2016-01-04 12:28:48
【问题描述】:

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

【问题讨论】:

    标签: tensorflow deep-learning


    【解决方案1】:

    有一个类似的问题here,答案使用了keras。

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

    一个概念图

    这个图就是按照这个paper画的。

    假设我们正在训练一个预测图像中数字的分类器,每张图像最多 5 个数字。这里我们定义了 6 个输出层:digit1digit2digit3digit4digit5lengthdigit 层应该输出 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 2017-12-09
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多