こんにちは!
G検定は取得したものの、依然として機械学習、ディープラーニングの実装イメージがわかないのが悩みの種です。
「いろいろなモデルはあるけれど、実際に使うにはどうすれば?」
本当にもどかしいです。
また、インターネットには「いきなり応用編!」といった実装があふれていて、「まず、どうすれば?」といったステップアップが難しいように見えます。
実際、私は人に教えてもらって「なるほど」と実感しました。
実感するとともに、「こんなに入り口が簡単なら、すぐに入れたらいいのに。」とも思いました。
いまPythonでは、かなり簡単に先人のモデルを使えます。
「Keras」といった定番ライブラリを使うことで、誰でも簡単に、その恩恵を受けられます。
そこで、今回はKerasを使った最低限のコードでディープラーニングを実装してみようと思います。
前提条件
本記事の前提スキルや環境は次のとおりです。
- ディープラーニングに関する知識(できればG検定の水準)の知識があること
- Google Colaboratory (Jupyterライクなオンラインの無料Python実行環境) を利用できること
今回の記事では、とても有名なディープラーニングのモデルで、画像分類を実装します。
モデルは、既に誰でも自由に使えるようになっている学習済のものを利用します。
なお、以降の実装で識別させる画像は、下記の画像を使っています。
こちらは「ぱくたそ」というフリー画像提供サイト様のものです。
※利用規約上は大丈夫そうでしたが、もしそぐわないようでしたら速攻で見直します!
実装
それでは2つほど実装してみます。
VGG16
ImageNet画像セットで学習済のモデル「VGG16」を使って、ブロッコリーか当ててもらいます!
from keras.applications.vgg16 import VGG16, preprocess_input, decode_predictions from keras.preprocessing import image from google.colab import drive import numpy as np # (1) read an input-data drive.mount('/content/drive') pixel = 224 # input image size defined by the model you use img = image.load_img( "/content/drive/MyDrive/colab/data/0I9A2143.jpg", # input-image target_size=(pixel, pixel) ) # (2) preprocess the input-data data = image.img_to_array(img) data = np.expand_dims(data, axis=0) data = preprocess_input(data) # (3) load a trained model model = VGG16(weights='imagenet') # (4) predict by the model preds = model.predict(data) # (5) show the result predicted by the model results = decode_predictions(preds, top=10)[0] for result in results: print(result)
結果、次のように「ブロッコリー98.9%」となりました!
('n07714990', 'broccoli', 0.9893301) ('n07714571', 'head_cabbage', 0.004693658) ('n07715103', 'cauliflower', 0.0025434813) ('n07716358', 'zucchini', 0.0012233483) ('n07718472', 'cucumber', 0.00050261203) ('n07745940', 'strawberry', 0.00016703807) ('n03991062', 'pot', 0.00016021698) ('n04522168', 'vase', 7.7303834e-05) ('n03786901', 'mortar', 7.203448e-05) ('n07711569', 'mashed_potato', 6.9734306e-05)
結果はともあれ、実装が恐ろしく簡単すぎるのが実感頂ければ嬉しいです。
InceptionV3
次は「InceptionV3」です。
こちらもImageNet画像セットで学習済のモデルです。
from keras.applications.inception_v3 import InceptionV3, preprocess_input, decode_predictions from keras.preprocessing import image from google.colab import drive import numpy as np # (1) read an input-data drive.mount('/content/drive') pixel = 299 # input image size defined by the model you use img = image.load_img( "/content/drive/MyDrive/colab/data/0I9A2143.jpg", # input-image target_size=(pixel, pixel) ) # (2) preprocess the input-data data = image.img_to_array(img) data = np.expand_dims(data, axis=0) data = preprocess_input(data) # (3) load a trained model model = InceptionV3(weights='imagenet') # (4) predict by the model preds = model.predict(data) # (5) show the result predicted by the model results = decode_predictions(preds, top=10)[0] for result in results: print(result)
VGG16と入力画像サイズが異なる点にご注意ください。
(前者は224、後者は229)
判定させた結果、次のように「ブロッコリー99.8%」と、VGG16を上回る結果となりました!
('n07714990', 'broccoli', 0.9984909) ('n07715103', 'cauliflower', 6.828501e-05) ('n01755581', 'diamondback', 6.221953e-05) ('n02894605', 'breakwater', 2.1083079e-05) ('n07871810', 'meat_loaf', 1.4795806e-05) ('n04326547', 'stone_wall', 1.4509934e-05) ('n01775062', 'wolf_spider', 1.22000065e-05) ('n04596742', 'wok', 8.753435e-06) ('n02172182', 'dung_beetle', 8.67305e-06) ('n04522168', 'vase', 8.660824e-06)
こんなに簡単にディープラーニングのモデルを切り替えられるんです。
まとめ
今回はKerasを使い最低限のコードでディープラーニングを実装ました。
ディープラーニングというと、私も何だか得体の知れないような複雑な実装が必要なイメージがありました。
しかし実際はそんなこともなく、用意されているクラスなり関数なりで、簡単に利用できることを知りました。
皆さんも気後れせず、是非どんどん利用してみてください!
なお、機械学習やディープラーニングのデファクトスタンダードのひとつとなっている技術にPythonがあります。
Python、Pandas、データ分析、に関するコツなどを次の記事にまとめてありますので、是非読んでみてください!
intellista.hatenablog.com