ChainerでCNN使って画像分類1-データ用意-
以前、TensorflowでCNN使って、犬の画像分類をやりました。それと同じことをChainerで実装しました。
作成したプログラムは全てgithubに上げてあります。
家で飼っている犬の写真が1000枚程たまったので、ネットから集めた画像1000枚と合わせて2000枚を学習データとします。
犬が画像に移っているかどうかを判定することを目標とします。
ChainerはTensorflowより、使いやすかったです。
以下の本を参考にしました。
この本は、numpy、基礎的なChainer利用、Trainer、NN、CNN、word2vec、RNN、LSTMなどを取り上げています。Python2ですが、コードも数式も扱っているので、オススメです。
以下の2ステップで行います。
1:データ用意
2:学習、精度確認
1:データ用意
上の記事とやっていることはだいたい同じです。画像を集めたり、整えたりするところは割愛するので、上の記事を見てください。
(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-学習、精度確認-に続きます。