Translate

#82 予測結果の図示と検証

『np.argmax(predictions[数字])』で、画像が何かを予測できるようになりました。

これ以降は、下図のように『予測結果の一部を一覧で表示し、確率をグラフで図示する』コードを体験していきましょう。



1.予測結果の図示


画像と確率がグラフで分かりやすいですね。出来上がったモデルをプレゼンテーションする際に、非常に説得力のある図ですので、さっそくコードを見ていきましょう。

※ Matplotlibが中心になりますので、興味のある方は、下記を参照してください。


興味が湧かない方は、こういうコードもあると頭の片隅にでも記憶しておいて、使う場面があったらコピペしましょう。


2.自作の関数

さて、ここでは、自作の関数を作成し、『予測結果の一部を一覧で表示し、確率をグラフで図示する』コードを書いていきます。

 def 関数名(引数):
         処理内容

関数名は自由に決めることができますが、慣習としてすべて小文字にします。関数名に複数の単語を使う時は、単語の間に『_』を使います。

下記に、簡単な例を挙げておきます。




『while』は、条件を満たさなくなったら繰返し処理(ループ)を終了するものです。以前解説した『forループ』では、指定された回数繰り返すと終了でしたので、繰返し処理(ループ)の条件が異なりますね。


3.画像と予測ラベルを表示する関数

チュートリアルのコードを見てみましょう。前半の部分は、自作の関数『plot_image』を定義したもので、それは、指定した1枚の画像を表示し、その下に『予測結果』、『確率(%)』、『実際の正解』をテキストで表示させる関数です。







4.10個のクラスの予測確率を棒グラフで表示する関数 

後半の部分は、自作の関数『plot_value_array』を定義したもので、それは、モデルが出力した10個のクラスごとの確率を、0~1の範囲の棒グラフで可視化させるものです。





5.予測を検証する

では、予測を検証するために、テスト用データセットの最初の画像(インデックス 0)について、モデルの予測画像と各クラスの予測確率の棒グラフを左右に並べて表示するコードを見てみましょう。


最初の3行は、

1行目:表示したいテストデータのインデックスを指定

2行目:描画するグラフ全体のサイズを『横6インチ、縦3インチ』に設定

3行目:画面を1行2列に分割し、その『1つ目(左側)』のエリアを操作対象にします。

画像(インデックス 0)について、モデルの予測画像、予測結果、各クラスの予測確率の棒グラフが左図のように表示されました。




予測を検証するために、テスト用データセットの別の画像(インデックス 12)についても同様に表示させることができます。




確率が一番大きい棒グラフ(クラス 5)が、赤色になっていますね。これは、予測が間違っていたことを示します。確かに画像はSandalに似ていますね・・・。

それでは、複数の予測を表示させましょう。

下記は、テスト用データセットの最初の15個(5行 × 3列)のデータに対して、それぞれの画像(予測結果含む)と予測確率の棒グラフを並べて一括で表示するコードです。




個別に1個ずつ確認するのではなく、15枚の画像とモデルの予測分布を一度に並べて確認することができます。




これにより、モデルがどのような種類の画像(例えばコートとプルオーバーなど)に対して予測を間違いやすいかを視覚的に素早く把握することができます。

確率が高い場合でも、モデルが間違っていることがあることに注意してください。





コメント