ニューラルネットワークの基本をTensorflowで学ぶ-その1

ニューラルネットワーク

TensorflowはGoogleの開発した機械学習ライブラリ(であると同時にOSS)です。
機械学習学びつつ、本格的なAIを開発するには、利用しない技術者はいないと思います。
ウェブ系開発者用にはTensorflow.jsも用意されていますが、これはまだちょっと動作が重いので、バックエンドではpythonを使った方が良いように思います。

新年第一弾目のブログ記事をなかなか書けませんでした、
自分が学んだところまでを取り敢えず発信します。今年もとにかく行動するのみ。考えてちゃ稼げない。Don’t think! act, feelです。

結局手軽に機械学習を学習・体験しどのようなものなのかを理解するには
Google Colaboratoryが2020年1月現在では一番おすすめな気がします。他にもあれば教えてください。

本記事の前提条件として

次の状態を確認できる方が対象です。

  • Googleアカウントを持っていて利用している
  • Googleドライブを普段利用していること
  • Pythonの基本は理解していること
  • jupyterの基本操作は知っていて、少しは触ったことがあること
  • Colaboratoyを一応使える状態にあること

たがが、機械学習のコードを書くのにまあ、いろいろ基礎的な条件をクリアにしないといけません。面倒くさいけど。

Googleにログインした状態でhttps://colab.research.google.com/へ行くと、すぐにjupyterっぽいエディタが利用できます。
使い方はほとんどjupyterと変わりません。windowsならセル入力後にshift+enterでセル実行して次のセル入力にすすめたりします。

参考文献

  • 現場で使える!TensorFolow 開発入門(翔泳社)著者:太田満久 須藤広大 黒澤匠雅 小田大輔

参考にした書籍は機械学習をできるだけコードに触れながら、基本が理解できるような内容の構成になっています。
上級者には物足りないでしょうが良書だと思います。
機械学習中級者もしくは初学者で前述の条件があてはまる方であれば、下記のコードはすぐ理解できると思います。
不明点はググりましょう。

先にオライリーの書籍で勉強してしまって、遠回りしました。
オライリーも悪くはありません。しかし理論が主体で実践的なイメージが沸かないため、普通に読んでいると
ちょーぜつ眠くなります。確実に熟睡します。

Tensorflow練習・学習サンプル

機械学習を試してみて最近気になるのはデータの前処理やモデルの構築、モデルの評価方法と後をつきません。
今回は学習済のモデルを利用する方法です。(データの前処理やモデルの構築が不要な場合に役に立つ)
事例は犬、猫の画像判定です。
それではサンプルのコードを入力していきましょう。

[1]

from tensorflow.python.keras.applications.vgg16 import VGG16
# 初回呼び出しにモデルをダウンロード、時間がかかる
model = VGG16()

[2]

# モデルのサマリーを確認する
model.summary()

モデルのサマリが出力されます。あれこれ出ますがびっくりしないように。

[3]

# 入力画像の準備
from tensorflow.python.keras.preprocessing.image import load_img
google.colab.drive.mount('/content/gdrive') 

googleドライブをマウントします。

[4]

# Googleドライブをマウント後は次のパスで参照できる
# あらかじめMy Drive直下にai-image-sampleというフォルダを作成し、犬と猫の画像をUPLOAD
gpath_dog = "/content/gdrive/My Drive/ai-image-sample/dog-1.jpg"
gpath_cat = "/content/gdrive/My Drive/ai-image-sample/cat-1.jpg"

img_dog = load_img(gpath_dog, target_size=(224, 224))
img_cat = load_img(gpath_cat, target_size=(224, 224))

[5]

# 画像を確認する
img_dog

[6]

# 画像を確認する
img_cat

[7]

from tensorflow.python.keras.preprocessing.image import img_to_array
arr_dog = img_to_array(img_dog)
arr_cat = img_to_array(img_cat)

[8]

from tensorflow.python.keras.applications.vgg16 import preprocess_input
arr_dog = preprocess_input(arr_dog)
arr_cat = preprocess_input(arr_cat)

[9]

import numpy as np
arr_input = np.stack([arr_dog, arr_cat])

[10]

print('shape of arr_input:', arr_input.shape)

[11]

# 予測値(確率)を算出
# 推論では2*1000の2次元配列が出力される
probs = model.predict(arr_input)

# 予測値のshapeを確認
print('shape of probs:', probs.shape)

# 予測値の表示
probs

[12]

from tensorflow.python.keras.applications.vgg16 import decode_predictions

# 予測値は1000クラスそれぞれの確立のみで返されるため、クラス名が判断しにくい
# decode_predictions()を使ってわかかりやすい結果に変換しし、上位5つを表示する
results = decode_predictions(probs)

[13]

# 犬の画像の結果を表示
results[0]

以下が出力される。柴犬の画像をUPしたけど、ニアミス。でもとても似ている犬種が結果でてくる。
[(‘n02115641’, ‘dingo’, 0.9620121),
(‘n02110806’, ‘basenji’, 0.03396192),
(‘n02113023’, ‘Pembroke’, 0.0014028483),
(‘n02113186’, ‘Cardigan’, 0.0008780911),
(‘n02105412’, ‘kelpie’, 0.00086792477)]

[14]

# 猫の画像の結果を表示
results[1]

以下が出力される。トラ猫の画像をUPしたら、まあまあ合ってた。
[(‘n02123045’, ‘tabby’, 0.48464534),
(‘n02123159’, ‘tiger_cat’, 0.30950224),
(‘n02124075’, ‘Egyptian_cat’, 0.11161373),
(‘n02808440’, ‘bathtub’, 0.010943572),
(‘n04493381’, ‘tub’, 0.01026483)]

今日は以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です