見出し画像

KerasのメトリクスにF値がないので作ってみた

まずはコード

概要

Metricクラスを継承してF値クラスを作成

なぜkerasにF値が用意されてないのか

下のリンクを見るとわかるように、元々はあったのに削除されています。

一体なぜ?以下のURLに書いてありました。

つまり、

「バッチ毎にスコアを算出し、その後エポックに含まれる各バッチのスコアの平均を求めたもの」と「エポック全体のデータを用いて算出したスコア」に違いが出るメトリクスに関しては、バッチ毎のスコアを算出するMetricの仕様では誤解を招く恐れがあったから

らしいです。
つまり、データ集合a, bとメトリクスMがあったとき、

mean(M(a), M(b)) ≠ M(a+b)

となるものはKerasがバージョン2になるときに削除されたようです。

そこで

metrics_utils.update_confusion_matrix_variablesを用いて混同行列(confusion matrix)をバッチごとに更新している(?)Recallの実装を参考にF値を求めてみました。

正直あってる自信ない…
間違ってたらご意見お願いします…

修正

2021/07/03:GitHub上のコードの誤字を修正しました。
    旧:def reset_state(self):
新:def reset_states(self):

2022/01/20:追記
TensorFlow AddonsにF値の実装がありました。
こちらです。
かなり前に見つけてたのに記事の更新を忘れていました…。

いいなと思ったら応援しよう!