2017-05-02 48 views
0

所以我開始實施Gupta等人的論文「自然圖像中的文本本地化的合成數據」。我遇到了一個嚴重的問題。如何在TensorFlow的完全卷積網絡上實現損失?

網絡架構是一個完全卷積網絡。最後一層基本上是一個NxNx7張量(想象一個矩陣,每個單元有7個值)。每個單元格都具有P和C值。 P是關於應該回歸的邊界框的6個參數,C是置信度。

現在我想在這一層實現平方損失。正如本文所述,最後一層的每個單元都是一個預測,如果確實該預測器的位置應該包含一個邊界框,那麼應該將該損失應用於該預測器(或單元)中的所有參數。如果它不應該包含一個邊界框,那麼只有迴歸置信度C就足夠了。

所以我應該在TensorFlow中動態定義單獨的損失,我該怎麼做?

回答

0

您可以使用tf.cond,並喜歡寫東西

loss = tf.cond(is_there_sthg_label, lambda: tf.add(loss1, loss2), lambda: loss2) 

編輯

對不起,我沒有正確地理解你的問題。如果存在邊界框,則可以在[i, j]上創建一個大小爲NxN的掩碼,其值爲True(在運行時),否則爲false。然後你計算你都針對每個小區的損失,你得到張量loss1和形狀NxNloss2,然後

#loss1 is the loss on the confidence only, loss2 is the loss on P 
loss_tensor = loss1 + tf.multiply(loss2, tf.cast(mask, loss2.dtype)) 
total_loss = reduce_sum(loss_tensor) 

+0

我能做到這一點迭代(當然如果你的批次仍然工作)?就像取出輸出層的每個單元並決定該單元的損失一樣。 – alexovits

+0

@alexovits我編輯了我的帖子 – gdelab

+1

我會盡快嘗試。感謝這看起來很有希望。這只是瘋狂的,TF有時可能無證。 – alexovits

相關問題