2017-09-13 112 views
0

我在多任务工作学习问题,我有3个不同的任务来解决:缺少标签

  • 多标签分类问题p1我哪里有大小s1,其中的标签矢量v1每个正确的标签有一个1,否则为0。
  • 多标签分类问题p2其中我有一个大小为s2的标签矢量v2,其中每个正确的标签有1,否则为0。
  • 单个标签分类问题p3其中我有一个大小为s3的标签矢量v3,其中我有一个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或其他任何东西,如果这可以帮助!

非常感谢!

+0

如果没有标签,为什么在训练集中的输入是完全的?这种媒介没有学习。在开始之前从训练集中删除这些。 – Prune

+0

它是一个多达德网络。这意味着我可以为两个任务分配一个标签,而不是第三个标签,因此我不想将其删除,因为它会为三个任务中的两个带来信息! –

+0

我明白了;任务不是独立的。 – Prune

回答

0

这取决于您拥有的网络类型,也许您是否有批次培训或个人培训。我假设你的内部网络是三个独立的

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

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