"BOKU"のITな日常

還暦越えの文系システムエンジニアの”BOKU”は新しいことが大好きです。

EXCELで分類に失敗したデータの一覧表を作って確認する方法/Neural Network Consoleの使い方

Neural Network Consoleは、評価結果の明細が「output_result.csv」に出力します。

これをうまく使うと、正しく評価できなかったデータとそうでないデータを振り分けて、原因調査や改善検討にやくだつ情報を得ることができます。

今回は、それをMNISTデータでやってみます。

f:id:arakan_no_boku:20190326212937j:plain

 

output_result.csvの場所

 

output_result.csvの場所です。

Neural Network Consoleの「EVALUATION」タブの結果欄の青地に白いチェックマークのアイコンを選択して左クリックするとメニューが表示されます。

それで、「Open Result Location」を選択すると、output_result.csvのあるフォルダが開きます。

f:id:arakan_no_boku:20181124144425j:plain

フォルダの内容はこんな感じ。

f:id:arakan_no_boku:20181124144609j:plain

このCSVファイルを、どっかにコピーしてEXCELで開きます。

f:id:arakan_no_boku:20181124145122j:plain

普通にダブルクリックで開いても大丈夫です。

 

output_result.csvを開いて加工する

 

まず、上書きしてしまわないように、別名のEXCELファイルとして保存します。

シートには、A列に評価対象ファイル名(今回は画像なので、画像ファイルのパスとファイル名)があります。

B列は教師付き学習の「正解ラベル」です。

そして、C列より右に評価実施結果が続きます。

この数はMNISTで10分類するなら、10列ありますし、YES/NOの2値分析の場合だと1列の場合もあります。

 

正解は計算式を使って自分でみつける必要がある

 

ここの数字は「この列が正解である確率」を示しているだけです。

だから、それらを比較して、一番大きな数字のある列のINDEX番号(y'_0なら「0」)を評価結果として取り出したやる必要があります。

これは、EXCELの関数を使えばできます。

 

評価結果を取り出すEXCEL関数

 

試しにやってみます。

まず、B列とC列の間に2列ほど挿入します。

そうすると、今回はMNISTの10分類なので、E列(y'_0)からN列(y'_9)に結果がはいる恰好になります。

そこでC列2行目に以下の関数を入力します。 

 =MATCH(MAX(E2:N2),E2:N2,0) - 1

MATCH関数は、検査範囲の中で、検査値と一致したインデックスを返します。

今回の場合は、E列からN列の数字の最大のもの(MAX)が検査値で、それをE列からN列で探すわけです。

MATCH関数のインデックスは指定した検査範囲の先頭が「1」なので、10列あると「1」から「10」までのどれかの数値が戻されます。

でも、Neural Network Consoleの評価は「0」から「9」なので、結果から1を引いているというわけです。

さらにD列2行目には、以下の関数を入力します。

=IF(B2=C2,"OK","NG")

 これは、B列とC列・・つまり、正解ラベルと評価結果を比較して、一致してればOK、でなければNGを表示してるだけです。

上記は2行目の例なので、その関数を下の行にバーーっとコピーします。

そしたら、こんな感じ。

f:id:arakan_no_boku:20181124210730j:plain

 

アンマッチの見つけ方

 

あとは、「一致」の列でフィルターをかけると、アンマッチになっている画像ファイルがわかる・・というわけです。

f:id:arakan_no_boku:20181124213158j:plain

残念ながら、パスとファイル名がわかるだけなので、実際の画像ファイルを開くのは手作業になってしまいます。

ここを自動でしたい場合は、VBAとかが必要になります。

こちらでやってみてます。

arakan-pgm-ai.hatenablog.com

 

LeNet.sdcprjのMNISTでアンマッチになってた画像をチェックしてみた例

 

ちなみに、上記のやり方で、アンマッチになっていた画像をいくつか拾ってみた例がこちらです。

f:id:arakan_no_boku:20181124212315j:plain

どうですか。

単に、一致・不一致というだけではわからないですが、こうやってみると、これ以上の精度を求めるのがいかに難しいかが理解できます。

なんせ、人間が見ても、評価結果の方が正しいと答える人が多そうな気がするようなレベルですからね。

だとすると。

実際に%ででている精度よりも、正しく識別できてるんじゃないかとかみたいに考えることもできます。

また。

自分で作ったオリジナルデータセットで学習・評価をしている場合、こうやってチェックしてると、正解ラベルがそもそも間違っているとか、画像の作りがよくないものが混じったとか・・みたいな、データ作成のミスが見つかったりもします。

だから、単純に「精度が97%あるからOK」みたいな事で終わらせず、どういうデータでアンマッチになっているのかを調べるのは重要なことだと思ってます。

なんですけど。

こういうチェックは、Tensorflowとかkerasとかだと、こんなに簡単ではありません。

評価でアンマッチになったものを、画像ファイルとして出力するプログラムをかくとか、それなりの工夫とスキルがいります。

でも、Neural Network Consoleだと「output_result.csv」があるおかげで、こうやってEXCELでも気楽にチェックできます。

その辺の敷居の低さは有難いですね。

今回はこのへんで。

ではでは。