TensorFlow

【TensorFlow】TensorFlow/Kerasで畳み込みニューラルネットワークの実装。一般物体の分類。

どうも、とがみんです。

以前の記事では、Kerasを用いてニューラルネットワークを構築し、手書き数字画像の分類を行いました。


この記事では、一般的な物「鳥」や「猫」、「犬」などの画像を分類する畳み込みニューラルネットワークを「Keras」を利用して構築していきます。

畳み込みニューラルネットワークの概要は以下の記事にまとめています。


実装するものの概要

今回実装する畳み込みニューラルネットワークの概要は以下です。入力画像は、縦32×横32×RGBデータ32となってます。

今回は、「CIFAR-10」というデータを利用し、「鳥」、「犬」、「猫」、「飛行機」、「自動車」、、、その他10種類に分類するため、出力層のノードは10個になっています。

>The CIFAR-10 dataset

データの準備

「CIFAR-10」データセットをダウンロードします。

ダウンロードしたデータを確認すると、32ピクセル×32ピクセルのRGB画像データ、学習用50000枚とテスト用10000枚が確認できます。

以下のような画像があります。

>CIFAR-10|人工知能に関する断創録

畳み込みニューラルネットワークの実装

上記データを分類する、畳み込みニューラルネットワークのシステムを、「Keras」を利用して、以下の流れにそって構築していきます。

  1. モデルの構築
  2. モデルのコンパイル
  3. モデルの学習
  4. 学習済みモデルの保存と読み込み

モデルの構築

これに沿ってモデルを構築します。

>Convolutionalレイヤー|Keras Documentation

モデルのコンパイル

以下のコードを実行します。

学習アルゴリズムには「Adam」、損失関数は「クロスエントロピー関数」を指定しています。

モデルの学習

モデルを学習させます。

画像データは0〜255の値を0〜1に直すために、255で割っています。

バッチサイズを100、エポック数を10にしています。

各エポック終了後にテストデータで精度を確認するために、validation_dataにテストデータを入れてます。

実行すると学習が始まります。

学習済みモデルの保存と読み込み

作成した畳み込みニューラルネットワークのモデルを保存するコードと、読み込むコードです。

学習結果の確認

認識精度・損失関数の推移

以下のコードを実行すると、各エポックごとの認識精度と損失関数の値をプロットしたグラフが表示されます。

学習は順調に進んでいますが、テストデータに対する精度は「71%」程度で落ち着いています。損失関数の値も、ほぼ変わらない状態になっています。

なので、これ以上学習させても、学習データのみに対応したシステムになってしまうことが考えられるので、

より精度を上げるためには、畳み込み層の数を変えたり、ノード数を変えたりして、探る必要がありそうです。

テストデータの画像と予測ラベルの確認

テスト用データ30個の正解ラベルと、推測した結果を以下に表示します。

カエルと猫を間違えがちですね(笑)

まとめ

Kerasを利用して、畳み込みニューラルネットワークによる、画像の分類システムを構築しました。

認識精度は71%程度だったので、まだまだ改良する必要がありそうです。

参考文献

>KerasでCNN実装

>今更KerasでCNN