多任务网络中缺少标签

时间:2017-09-13 16:36:37

标签: tensorflow deep-learning

我正在研究一个多任务学习问题,我需要解决3个不同的任务:

  • 多标签分类问题p1我有一个大小为v1的标签向量s1,其中每个正确的标签都有1,否则为0。
  • 多标签分类问题p2我有一个大小为v2的标签向量s2,其中每个正确的标签都有1,否则为0。
  • 单个标签分类问题p3,其中我有一个大小为v3的标签向量s3,其中我有1表示正确的标签,否则为0。

我遇到的问题是,对于每个示例,我可能会遇到一个或两个未定义标签的问题。例如,我可以:

v1 = [0,1,1,0]
v2 = [1,0,1,0,0,1]
v3 = [0,0,0]

缺少v3中的标签。我的问题是如何阻止backprop解决丢失标签的问题,以便在丢失数据时不更新网络的权重?

现在我的代码看起来像这样:

target1 = tf.cast(labels['1'], tf.float32)
loss1 = tf.reduce_mean(
    tf.nn.sigmoid_cross_entropy_with_logits(
        labels=target1, logits=logits1))

target2 = tf.cast(labels['2'], tf.float32)
loss2 = tf.reduce_mean(
    tf.nn.sigmoid_cross_entropy_with_logits(
        labels=target2, logits=logits2))

target3 = tf.cast(labels['3'], tf.float32)
loss3 = tf.reduce_mean(
    tf.nn.softmax_cross_entropy_with_logits(
        labels=target3, logits=logits3))

loss = loss1 + loss2 + loss3
train_op = tf.train.AdamOptimizer().minimize(
                loss, global_step=global_step)

我的想法是将每个示例的权重设置为0,但缺少标签,但我真的不知道它是否是一个可行的解决方案,特别是在我得到一个只有缺少标签的完整批次的情况下一个问题。

我可以将缺少值的向量填充到-1或其他任何东西,如果这可以帮助!

非常感谢!

1 个答案:

答案 0 :(得分:0)

这取决于您拥有的网络类型,以及您是否进行批量培训或个人培训。我假设您的内部网络是三个独立的

如果您的训练是个人的,那么将权重设置为零将起作用。通过将BP(反向传播)迭代的学习速率设置为0,可以获得相同的效果。

另一种可能性是检查第一层的输入向量;如果它为零,则根本不进入该阶段的训练;一个简单的继续应该带您进入下一个输入迭代。