update.概要Keras(Tensorflowバックグラウンド)を用いた画像認識の入門として、MNIST(手書き数字の画像データセット)で手書き文字の予測を行いました。Notebook)はこちら(Github)をご確認下さい。実装した前提KerasとはKerasとは、Pythonで書かれたニューラルネットワークのライブラリです。バックエンドとしてTensorFlow、CNTK、Theanoのライブラリを選択することができます。人間にとって分かりやすい設計の為、初心者でも簡単に迅速なプロトタイピングが可能となっています。日本語ドキュメントも充実しています。インストール方法は公式HPをご参照下さい。インストールKerasに加え、今回バックエンドとして利用するTensorflowもインストールします。keras2つのモデル記述方法kerasでは、ネットワークの層(レイヤー)を記述する方法が2つあります。Sequentialモデルネットワークを1列に積み重ねていく、シンプルな方法です。API複雑なネットワークの記述が可能な方法です。Sequentialモデルと異なり、複数の出力や共有レイヤーの定義等が可能となっています。APIを用いて実装してみます。Network:畳み込みニューラルネットワーク)のモデルです。全結合層のみ冗長な部分は省略して主要な部分のみ解説していきます。ソースコードはこちら。データセットのダウンロード教師ラベル付けされた手書き文字をダウンロードします。mnist.load_data()内容は10種類の数字の白黒画像(28x28)です。訓練データが60000枚、テストデータが10000枚となっております。Kerasでは、MINIST以外にもいくつかのデータセットが提供されています。画像データの前処理ネットワークで扱う為に、訓練データを1次元配列に変換して、値を0から1の間に変換します。教師データについてもone-hot表現(正解の要素を1として、他の要素を0にする表現)に変換します。全結合層3層のみのシンプルなモデルです。Dropoutは、訓練時に一定確率で中間層を無視する関数です。過学習を防ぐために使用します。activation='softmax')(nw)訓練epoch(学習の繰り返し単位)20回で訓練を行います。y_test))kerasでは、訓練を行うと自動でログを出力をしてくれます。left')plt.show()epochが2回目では95.24%、20回目では98.23%と高い認識精度が出ています。left')plt.show()epochが10回以上の時点で過学習(overfitting)が起きていることが分かります。CNNモデル同じデータに対して、CNNで画像認識を行います。ソースコードはこちら。画像データの前処理kerasのバックエンドで使用するライブラリにより入力チャネルの順番が異なる為、条件分岐させて前処理を定義します。metrics=['accuracy'])コールバックの定義kerasでは、訓練中に実行可能な処理をコールバックとして定義できます。今回は、以下のコールバックを定義します。histogram_freq=0)訓練の実施epoch数10で実施します。1回目でも90.09%と高い精度が出ています。ロス関数:汎化性能も、全結合層のみのモデルより良い結果となっています。今回は、モデルの可視化にTensorboardを用います。以下のコマンドで起動します。コールバック処理にて出力したログを指定します。--logdir=./out/以下のようにモデルの可視化ができました。今回はMNISTの手書き文字認識という比較的難易度の低い課題でしたので、シンプルなネットワークでも十分な精度で予測できました。実際に物体検出などのより難易度の高い課題を解く場合、特徴検出を行う為にVGG16等の学習済モデルを利用することで、最初から精度の高い特徴検出を行うのが一般的となっています。(実際に以前紹介したYOLOやSSDでもVGG16が使用されています)次は、学習済モデルによるファインチューニングを行い独自課題の認識にもチャレンジしてみたいと思います。Tensorboardももっと色々な機能があるので使っていきたいと思います。upLoginユーザーは見つかりませんでした。