2017-08-15 1 views
0

tf.metricsとtf.contrib.slim.metricsを正しく理解しているかどうかわかりません。tf.metricsとスリムストリーミングメトリックの理解

# Setup of the neural network... 

# Adding some metrics 
dict_metrics[name] = compute_metric_and_update_op() 

# Getting a list of all metrics and updates 
names_to_values, names_to_updates = slim.metrics.aggregate_metric_map(dict_metrics) 

# Calling tf.slim evaluate 
slim.evaluation.evaluation_loop(eval_op=list(names_to_updates.values()), ...) 

するのは、私は精度を計算したいとしましょう:

は、ここでプログラムの一般的な流れです。私は2つの選択肢があります: a)すべてのバッチ内のすべてのイメージの精度を計算します。 b)1つのイメージ内のすべてのピクセルに対する精度を計算し、すべてのバッチ内のすべてのイメージに対してすべての精度の平均を取ってください。バージョンAの

)これは私が書くだろうかです:

と同等でなければなりません
name = "slim/accuracy_metric" 
dict_metrics[name] = slim.metrics.streaming_accuracy(
    labels, predictions, weights=weights, name=name) 

:さらに、この行

を追加するために無意味な、あるいは間違っているはずです

name = "accuracy_metric" 
accuracy, update_op = tf.metrics.accuracy(
    labels, predictions, weights=weights, name=name) 
dict_metrics[name] = (accuracy, update_op) 

dict_metrics["stream/" + name] = slim.metrics.streaming_mean(accuracy) 

tf.metrics.accuracyから得られる精度は、すでにすべてのバッチで計算されているためia the update_op。正しい?

私はオプションB)で行く場合、私はこのような効果を得ることができます:

accuracy = my_own_compute_accuracy(labels, predictions) 
dict_metrics["stream/accuracy_own"] = \ 
    slim.metrics.streaming_mean(accuracy) 

はmy_own_compute_accuracy()ラベルと予測テンソルのシンボリック精度を計算しますが、任意の更新操作を返しません。実際、このバージョンでは、単一のイメージまたは単一のバッチに対する精度が計算されますか?基本的に、バッチサイズを完全なデータセットのサイズに設定すると、このメトリックはslim.metrics.streaming_accuracyの出力と一致しますか?

最後に、同じ更新操作を2回追加すると、2回呼び出されますか?

ありがとうございました!

答えて

0

はい、スリムストリーミングの精度は、(エポックを1回だけ行う場合)データセット全体でのバッチごとの精度の平均を計算します。

精度機能については、実装方法によって異なります。

+0

複数のエポックで動作させるとどうなりますか?変数をリセットする必要はありますか? tf.slimはそれを世話していますか? acc = tf.equals(ラベル*重み、予測)/tf.reduce_sum(重み) – user667804

+0

複数のエポックを実行すると、ちょうど現在のエポック。私はスリムがあなたのためにそれを世話するとは思わない。これらのメトリックは、トレーニング中ではなく評価中に使用されることを意図しています。 –

+0

私はslim.evaluation.evaluate_loop関数を使用しています。この関数は、利用可能になるとすぐに新しいチェックポイントを読み込みます。私はそれもカウンターをリセットすると思いますか? – user667804