metrics
が何であるかはまだ明確ではありません(以下のコードを参照)。彼らは何を正確に評価していますか?なぜmodel
でそれらを定義する必要があるのですか? 1つのモデルに複数のメトリックを含めることができるのはなぜですか?そしてさらに重要なことは、このすべての背後にあるメカニズムは何ですか?科学的な参考文献も歓迎します。
model.compile(loss='mean_squared_error',
optimizer='sgd',
metrics=['mae', 'acc'])
したがって、metrics
とは何かを理解するには、loss
関数とは何かを理解することから始めるのがよいでしょう。ニューラルネットワークのほとんどは、loss
関数を減少させる反復プロセスにより、勾配法を使用して訓練されます。 loss
は、2つの重要なプロパティを持つように設計されています-値が小さいほど、モデルはデータによりよく適合し、微分可能でなければなりません。これを知っているので、metric
が何であるかを完全に定義できます。これは、例の予測値とグラウンドトゥルース値が与えられると、モデルの適合度のスカラー尺度を提供する関数です。したがって、loss
関数はメトリックであることがわかりますが、逆は常に成り立つわけではありません。これらの違いを理解するために、metrics
の使用法の最も一般的な例を見てみましょう。
微分不可能な関数を使用してネットワークのパフォーマンスを測定します:精度は微分不能(連続的でさえない)なので、ネットワークを直接最適化することはできません。それに。ただし、最も正確なモデルを選択するために使用できます。
最終的な損失がそれらのいくつかの組み合わせである場合、異なる損失関数の値を取得します:あなたの損失には、重みは0
およびモデルの適合度を測定する用語とは異なります。この場合、エポック間でモデルの適合度がどのように変化するかを個別に追跡するために、metrics
を使用できます。
モデルを直接最適化したくない指標について追跡します:したがって-多次元回帰の問題を解決していると仮定しましょうほとんどがmse
を心配していますが、同時に、ソリューションのcosine-distance
が時間とともにどのように変化しているかに関心があります。次に-metrics
を使用するのが最善です。
上記の説明により、メトリックスとは何か、なぜ1つのモデルで複数のメトリックスを使用できるのかが明らかになることを願っています。それでは、keras
での使用の仕組みについて少し説明しましょう。トレーニング中にそれらを計算する方法は2つあります。
コンパイル時に定義されたmetrics
の使用:これはあなたが直接尋ねたものです。この場合、keras
は、トレーニング中に計算するように定義した各メトリックに対して個別のテンソルを定義しています。これは通常、計算を高速化しますが、これには追加のコンパイルのコストと、メトリックがkeras.backend
関数の観点から定義される必要があるという事実が伴います。
keras.callback
の使用:計算するために Callbacks
を使用できるのは素晴らしいメトリック。各コールバックにはmodel
のデフォルト属性があるため、トレーニング中にmodel.predict
またはモデルパラメーターを使用してさまざまなメトリックを計算できます。さらに、エポック単位だけでなく、バッチ単位またはトレーニング単位でも計算できるようになります。これには、計算が遅くなり、ロジックが複雑になるという犠牲が伴います-独自にメトリックを定義する必要があるからです。
ここ 使用可能なメトリックのリストと、独自のメトリックの定義方法の例を見つけることができます。
kerasメトリック ページの説明のように:
メトリックは、モデルのパフォーマンスを判断するために使用される関数です
メトリックは、トレーニングを終了し、過剰適合を回避するために、早期停止コールバックで頻繁に使用されます
参照: Keras Metrics Documentation
keras metrics
のドキュメントページにあるように、metric
はモデルのパフォーマンスを判断します。 metrics
メソッドのcompile
引数には、トレーニングおよびテスト段階でモデルが評価する必要のあるメトリックのリストが保持されます。次のような指標:
binary_accuracy
categorical_accuracy
sparse_categorical_accuracy
top_k_categorical_accuracy
および
sparse_top_k_categorical_accuracy
モデルのコンパイル時にmetrics
パラメーターで提供される利用可能なメトリック関数です。
メトリック関数もカスタマイズ可能です。複数のメトリックを評価する必要がある場合、dictionary
またはlist
の形式で渡されます。
メトリックを深く掘り下げるために参照する必要がある重要なリソースの1つを見つけることができます here
実装の観点から、損失とメトリックは実際にはKerasで同一の機能です。
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow.keras as Keras
>>> print(Keras.losses.mean_squared_error == Keras.metrics.mean_squared_error)
True
>>> print(Keras.losses.poisson == Keras.metrics.poisson)
True