tensorflowメモ(手書き文字認識その2)
前回生成したモデルを掘り下げてみる。
重み付けを行うパラメータが「final_w」に入っているとする。
final_w.shape (64, 10) # 最小値 numpy.min(final_w) -1.68 # 最大値 numpy.max(final_w) 1.55
「final_w」をグレースケール変換して視覚化してみる。
変換手順は以下のとおり。
- 各値に、「1.68」を加算する(結果は 0 から 3.36(= 1.68 x 2)の範囲になる)
- 各値を「75.893」倍(= 255 / 3.36)する(結果は 0 から 255の範囲になる、元々のゼロは「127.5」になる)
- 各値の端数を切り捨てる
各クラス(0から9)ごとの重みパラメータの変換結果は以下のとおり。
重みパラメータを可視化
中間値が灰色だとすると、白に近い部分は正、黒に近い部分は負に該当する。
これをゼロとラベル付けした画像に適用してみる。
outputとして出力された値を足し上げて各クラスの尤度を判定する。
outputの白に近い部分は正の値、黒に近い部分は負の値として作用する。
入力画像をモデルに通した後の各クラスの値
0: 2.6651433 1: -1.6024852 2: -0.6885104 3: -0.2711072 4: -0.0937684 5: 0.1937362 6: -0.3147157 7: -0.5869334 8: 0.0727276 9: 0.6259142
クラス"0"の値が一番大きく、次いで、クラス"9"の値が大きくなっている。
クラス"9"の重みを見てみると、左下部分に入力があるとマイナスに作用するようになっている。
クラス"9"のoutputでも左下部分がマイナスとして出力されており、結果、インプット画像がクラス"9"であることの尤度を押し下げている。
(クラス"0"とクラス"9"の特徴分けをしているのは左下部分と言える)