ChainerでCNN使って画像分類1-データ用意-

以前、TensorflowでCNN使って、犬の画像分類をやりました。それと同じことをChainerで実装しました。

 

person.hatenablog.jp

 

作成したプログラムは全てgithubに上げてあります。

github.com

 

家で飼っている犬の写真が1000枚程たまったので、ネットから集めた画像1000枚と合わせて2000枚を学習データとします。

犬が画像に移っているかどうかを判定することを目標とします。

 

ChainerはTensorflowより、使いやすかったです。

 

以下の本を参考にしました。

shop.ohmsha.co.jp

 

この本は、numpy、基礎的なChainer利用、Trainer、NN、CNN、word2vec、RNN、LSTMなどを取り上げています。Python2ですが、コードも数式も扱っているので、オススメです。

 

以下の2ステップで行います。

 

1:データ用意

2:学習、精度確認

 

 

1:データ用意

 

person.hatenablog.jp

 

上の記事とやっていることはだいたい同じです。画像を集めたり、整えたりするところは割愛するので、上の記事を見てください。

 

(28,28)の犬のjpg画像901枚をファイルlattteに、(28,28)の適当なjpg画像1101枚をファイルotherに用意できたところから始めます。

 

gazo2vec.pyの関数jpg_2_tensorはファイルのjpg画像を読み込んで、クラスごとに配列として保存します。

vec2train.pyの関数tensor_2_allはクラスごとに保存された配列データを訓練データ、テストデータに分けて保存します。

 

これらの関数をtrain_data_hozon.pyから使って、訓練データ、テストデータをファイルに保存しました。tensorflowでは(28,28,3)でしたが、chainerでは(3,28,28)にする必要があるので、それもここでやりました。

 

損失関数にソフトマックスクロスエントロピー誤差関数を使うので、label_cov.pyで、one-hotラベルを、クラス番号ラベルに変換して、ファイルに保存します。

 

これで、(3,28,28)の訓練データ、テストデータとクラス番号ラベルの訓練教師データ、テスト教師データをファイルに保存できました。学習の準備は完了です。

 

ChainerでCNN使って画像分類2-学習、精度確認-に続きます。

person.hatenablog.jp