2017-06-16 108 views
0

我目前正在使用FCN進行2級分割,並遇到一個奇怪的問題,即使用內置的mean_iou函數運行但不會產生任何損失。Tensorflow tf.metrics.mean_iou沒有產生損失,交叉熵工作正常

如果我將mean_iou保存爲摘要度量,模型運行良好,我可以看到IOU輸出保持爲0;但是,如果我嘗試將它用作損失優化器,它會產生一個錯誤,無法生成漸變(根據我的結果,這是有道理的,但我不確定它爲什麼不起作用)。

我已經初始化我的本地和全局變量(用其他的東西本地變量和他們工作的罰款),我的輸入都是整數,形狀像這樣:

(我也已經試過壓扁[批次x H x W,2])

y_truth = [batch, H, W, 2] (one-hot encoded) 
logits = [batch, H, W, 2] 
IOU, up_op = tf.metrics.mean_iou(
       labels = argmax(y_truth, axis=3), 
       predictions = argmax(logits, axis=3), 
       num_classes = 2) 

注意:我的y_truth上的argmax不會影響其整體輸出。

任何想法?我使用交叉熵(通過分段輸出確認)獲得了很好的結果,所以我知道模型正常工作。謝謝!

回答

0

您需要運行up_op以更新值。簡單的解決方案是

with tf.control_dependencies([up_op]): 
    if create_scalar_summaries: 
     tf.summary.scalar('IOU', IOU)