2017-06-16 18 views
0

現在、FCNを使用して2クラスのセグメンテーションを実行しており、組み込みのmean_iou関数を使用しても実行できないという奇妙な問題が発生していますいかなる損失も生じさせる。Tensorflow tf.metrics.mean_iouは損失を生み出さない、クロスエントロピーがうまく機能する

mean_iouをサマリーメトリックとして保存すると、モデルは正常に実行され、IOU出力は0のままです。しかし、それを損失オプティマイザとして使用しようとすると、勾配を生成できないエラーが発生します(私の結果では意味がありますが、なぜ動作しないのか分かりません)。

私は(他のもののために地元のVARSを使用し、それらが正常に動作している)私のローカルおよびグローバル変数を初期化している、と私の入力はそうのような形の整数、以下のとおりです。

(私も[にそれらを平らに試してみましたバッチ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) 
です。
関連する問題