【Keras】学習の初歩【犬猫判別1】

 

こんにちは、のっくん(@yamagablog)です。

 

ようやくGPUでディープラーニングができるようになったので、犬と猫の画像を判別してみたいと思います。

 

パソコンを買ってからGPUを設定するまでの苦労話は以下の記事にまとめてあります。

 

ドスパラでGPU搭載PCを買ってみた

【Ubuntu】TensorflowやKerasをGPUで動かす方法

 

いやー長かった。動かせるようになっただけで満足ですが、せっかくなので何かコードを書いてみたいと思います。

 

スポンサーリンク

 

使用するデータセット

 

kaggleというサイトから犬と猫の画像データセットをダウンロードします。

 

https://www.kaggle.com/c/dogs-vs-cats/data

 

25000枚ほど入ったzipファイルがありますのでその一部を使います。

 

ディレクトリの作成

 

訓練、検証、テスト用のディレクトリを作ります。それぞれのフォルダには犬と猫のそれぞれのフォルダを作っておきます。

 

 

ファイルのコピー

 

オリジナルのデータセットから以下の枚数だけ、上で作成したディレクトリにコピーしたいと思います。

  • 訓練用 – 2000枚
  • 検証用 – 1000枚
  • テスト用 – 1000枚

 

訓練用画像のコピー

 

犬、猫、それぞれ1000枚の画像をそれぞれ訓練用画像にします。

ファイル名は、cat.{0-999}.jpgのように連番になっているので、0-999の数字をfor文で回します。以下の例ではリスト内包表記で書いています。

 

 

検証用画像のコピー

 

犬と猫、それぞれ500枚ずつを検証用画像とします。

 

 

テスト用画像

 

テスト用画像も同様です。

 

 

ファイル数の確認

 

ファイル数の確認には、os.listdirの長さを数えます。

 

出力は以下の通り。

 

ネットワークの作成

 

ネットワークを作成します。

 

最後の層の活性化関数には、sigmoidを使います。

 

 

今回のような2値分類では、活性化関数は「sigmoid」、損失関数は「binary_crossentropy」を使うのが一般的みたい。

 

データの前処理

 

学習にかけるためには、画像ファイルに以下の前処理をしておきます。

  1. 画像ファイルを読み込む。
  2. 浮動小数点数型(float型)にする。
  3. ピクセル値(0-255)を、[0,1]の範囲の値にする

 

kerasのImageDataGeneratorを使うとこの処理を自動的にやってくれます。

なんて便利なのでしょう。

 

  • target_sizeは、画像のサイズです。上では150,150のサイズにリサイズします。
  • batch_sizeは、一度に処理する画像の枚数です。20枚を1バッチとします。
  • class_modeは、”binary”として二値のラベルを作成します。

 

内容を確認。

 

学習

 

訓練用は2000枚あるので1バッチ20枚処理するとすると100ステップ必要になります。

 

validation_stepsは、評価用のバッチをいくつ取り出すか決めるようです。検証用は1000枚なので、1バッチ20枚とすると、50ステップ指定すれば良いですね。

 

正解率の可視化

 

 

バリデーションの正解率は、70%-74%ほどになっています。

そこそこ分類できているようですね。

 

次はデータ拡張にトライしてみたいと思います。

 

【Keras】水増しとデータ拡張【犬猫判別2】

 

参考