2017-06-16 76 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)