オートエンコーダ(AutoEncoder)とは、入力画像を次元圧縮してから復元させることによって特徴量を学習し、学習後は入力画像とそっくりな画像を出力させるネットワークです。入力と同じ画像を出力するネットワークなんて意味がないように思えますが、これが異常検知に使えるんです。それから、ノイズ除去やメガネ女子のメガネを外すのにも、使えます(笑)。初歩的な異常検知をやってみたいと思います。28))plt.gray()ax.get_xaxis().set_visible(False)ax.get_yaxis().set_visible(False)plt.savefig("result.png")plt.show()シンプルなオートエンコーダのコードです。MNIST(数字の1〜9)のデータセットを学習し、学習後は入力に1〜9の数字を入れると、それとそっくりな1〜9の数字を出力します。ネットワークは、入力28×28=784次元を30次元に次元圧縮してから元の28×28=784次元に戻すものです。入力画像と同じ画像を出力させるように学習をさせると、30次元のところで、1〜9の数字の特徴量を重みとして学習するわけです。学習後にテスト画像を入力した結果です。上段がテスト画像、下段が出力画像です。忠実に再現出来るものですね。学習したことがあるものは再現出来るということは、逆に言うと学習したことがないものは再現出来ないわけです。この性質を利用すると異常検知が出来ることは何となく分かると思います。それでは、正常画像を「1」、異常画像を「9」として、試してみましょう。直後に、このコードを追加します。正常画像「1」はそっくりに再現出来ますが、異常画像「9」は全く再現出来ていません。この違いを定量化するために、テスト画像と出力画像の差を計算してみましょう。'+str(diff))plt.savefig("result.png")plt.show()plt.close()入出力の差分画像と差分数値を表示するコードです。コードの一部を修正・追加しています。各要素(784個)について入力から出力の引き算をし、その絶対値の総和をとって計算しています。score)を表示します。それでは、これで実行してみます。