2017-09-13 109 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來獲得相同的效果。

另一種可能性是檢查第一層的輸入向量;如果它爲零,則根本不要進入該階段的訓練;一個簡單的繼續應該帶你到下一個輸入迭代。