以前の記事でTensolfrowとKerasをインストールしました。
(ただし、TensolfrowとKerasのVersionがマッチしなかったので、後述するように日経ソフトウェアのツールでインストールしなおしました。)
s51517765.hatenadiary.jp
今日は、この環境を使って実際にニューラルネットワーク(ディープラーニング)を動かしてみました。
↓の日経ソフトウェアのソースを参考にしました。
- 作者: 日経ソフトウエア
- 出版社/メーカー: 日経BP社
- 発売日: 2017/11/24
- メディア: 雑誌
- この商品を含むブログ (1件) を見る
まだTensorFlowやKerasの理解度も低いので、コメントも結構細かく書かれているので理解の助けになります。
日経ソフトウェアはすぐ品切れになってしまうのが残念です。
現在すでに、この号は中古しかAmazonでは入手できないですが、他のネット書店をさがせば見つかるかもしれません。
動作環境
動作環境は以下です。Pillow(PIL)は画像処理のライブラリで必須ではありませんが、画像の水増し処理につかいました。
Python 3.5.2 |Anaconda 4.2.0 (64-bit)| tensorflow==1.8.0 Keras==2.0.5 Pillow==3.3.1
ごく簡単なニューラルネットワークの概念
今回のニューラルネットワークは図のような3層で、入力が、75px四方のRGB画像のため、 75x75x3 = 16875です。
この入力が0~255の値を持ったサイズ16875のlistになっているイメージです。
隠れ層1層と、出力層があります。
工程 じゃーん~~
ステップ1 Anacondaのインストール
これは、以前の記事の通りpython3.5のVersionのものをインストールしているのでスキップステップ2 TensorFlowとKerasのインストール
一度、すでに構築していた環境で進めてみましたが、NNが動かなかったのでこちらに戻ってtensorflowとkerasを再構築しました。ステップ3 学習用の画像を集める FlickrのAPIキーを取得
Flickrというサイトから学習用の画像データを収集するために、APIキーを取得します。この時に、YAHOO.COMのアカウントが必要になります。
www.flickr.com
ステップ4~5 Pythonのパッケージ「flickrapi」をインストールし、APIキーを設定する
ステップ6~8 画像をダウンロード
これも、同梱のpythonプログラムで自動的にできますが、このプログラムをここに載せるのは著作権的にアレなので…。キーワード(sakura, sunflower, rose)を指定して、それぞれ300枚ダウンロードします。
ステップ9 学習用の画像を手動で選ぶ
ここでは間違っている画像、余計なものが映っている画像を "手動で" 削除するように指示されていますが、特に変なものがなかったので何もしませんでした。ステップ10 学習用の画像から機械学習用のデータセットを作る
これも同梱のpythonプログラムで…機械学習用のデータセット
photo.npz
とテスト用のデータセットphoto-test.npz
が生成されます。ステップ11 機械学習のプログラムを動かす
学習済みモデルnn.hdf5
が作成されます。これがいわゆる学習ですね。
ステップ14(最終)画像を判定するプログラムを動かす
12~13で水増しをするステップがありますが、とりあえずスキップ。AIによる画像の判定結果
画像読み込み①→桜99%【正解】
画像読み込み②
→ひまわり(99%)【正解】
画像読み込み③
→ひまわり(99%)【不正解】
学習させていない”たんぽぽ"を読み込ませると、"ひまわり"と判定された。
画像読み込み④
→桜(99%)【不正解】
学習させていない"あじさい"を読み込ませると”桜”と判定された。
あじさいとタンポポを追加したAIによる画像の判定結果
同様にflickrからタンポポとあじさいをダウンロードし学習に追加しました。タンポポを追加しようと画像をダウンロードしたら、黄色と綿毛の2種類があることに気づき、ラベルに”わたげ”も追加しました。
このため、タンポポとわたげのサンプル数が少なくなったので、PILというライブラリで回転させた画像を作成し、水増ししました。
from PIL import Image import os #画像を回転して保存 path="C:/Users/***/Documents/Projects/AiGips/Dandelion" files = os.listdir(path) for name in files: file=Image.open(path+"/"+name) file = file.rotate(180) file.save(path+"/"+"0"+name, 'JPEG', quality=100, optimize=True)
画像読み込み①
→桜 (97 %)【正解】
画像読み込み②
→ひまわり(99%)【正解】
画像読み込み③
→アジサイ(99 %)【正解】
画像読み込み④
たんぽぽ (99 %)【正解】
画像読み込み⑤
→アジサイ (69 %)【不正解】
画像読み込み⑥再チャレンジ
→わたげ (84 %)【正解】
うちで妻が育てているアジサイ
これを75px四方に切り取って読み込ませました。
→アジサイ (99 %)【正解】
(ちなみに白いほうは "わたげ" と認識されました。)
まとめ
日経ソフトウェアのサンプルコードの改造で、"桜", "ヒマワリ", "バラ","たんぽぽ","わたげ","アジサイ" の認識を実装できました。精度としては白いアジサイが低いようです。
これは、もとの学習データのアジサイが青、紫系が多かったためかもしれません。