ポートフォリオサイト公開中

Google Colabを使ったTensorFlowとKerasの深層学習入門

こんにちは、ともろう(@tomorrowSLog)です。

最近Google Colabを使って機械学習の勉強を始めました。

機械学習の仕組みとか、コードによる実装とか色々学んでるんですが、とりあえず実際に何かコードを動かしてみたい!

そこで機械学習のチュートリアルでよく用いられるデータセットを使って簡単なコードを動かしてみました。

機械学習の細かい説明などはせず自分の備忘録かつ、とりあえず動くものが作りたい人向けに書いていきます。

目次
  1. はじめに
    開発環境
    参考文献
  2. コード全文
    出力結果
    ロードマップ
  3. コード解説
  4. まとめ

【pythonコードを読む】AV女優10000人webスクレイピング

はじめに

開発環境

開発環境はgoogle colabというgoogleが提供するクラウドサービスを利用します。

なのでプログラミングをする環境がないという人でも、インターネットにつながるパソコンさえあれば、今回のコードを動かすことができます。

なおこの記事では機械学習の詳しい説明はしてませんので、ご注意ください。

ともろう

プログラミングなんてやったことがないっていう人も、ぜひ手を動かしながらやってみてください。

Google colabへ行く!

【環境構築なし!】Google Colabを使ってGPUを動かす第一歩

簡単なgoogle colabの説明はこの記事からどうぞ。

参考文献



こちらの動画を参考にさせていただきました。

画像の可視化の細かい設定はこちらの書籍から参考にしました。

参考 kerasのドキュメントkeras.io

kerasのドキュメントはこちらからどうぞ

コード全文

コード全文
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np

mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data() 

x_train = tf.keras.utils.normalize(x_train, axis = 1)
x_test = tf.keras.utils.normalize(x_test, axis = 1)

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128, activation = tf.nn.relu))
model.add(tf.keras.layers.Dense(128, activation = tf.nn.relu))
model.add(tf.keras.layers.Dense(10, activation = tf.nn.softmax))

model.compile(optimizer= "adam",
             loss= "sparse_categorical_crossentropy",
             metrics= ["accuracy"])
model.fit(x_train, y_train, epochs=3)

val_loss, vall_acc = model.evaluate(x_test, y_test)
print(val_loss, vall_acc)

predictions = model.predict([x_test])

fig = plt.figure(figsize=(9, 9))
plt.subplots_adjust(wspace=1, hspace=1)
for i in range(9):
  ax = fig.add_subplot(3, 3, 1+i)
  ax. imshow(x_test[i])
  ax.set_title("prediction : {}".format(np.argmax(predictions[i])))
plt.show()

出力結果

こんな感じの出力結果となり、97%の学習制度を出すことができました。

表示させた文字と予想を照らし合わせても見事的中しているのがわかりますね。

ロードマップ

  1. 必要なモジュールを読み込む
  2. データセットを用意して、学習用とテスト用に分ける
  3. データの正規化
  4. 学習モデルの作成
  5. 学習用データを使ってモデルを学習させる
  6. 学習させたモデルを評価
  7. 予測と画像を出力

こんな感じの流れになっています。

コード解説

1.必要なモジュールを読み込む

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np

tensorflow、matplotlib.pyplot、numpyを使っていきます。

tensorflowは機械学習用のパッケージ、

matplotlib.pyplotはグラフ(画像)を表示させるもの、

numpyはベクトルや行列計算を高速で行ってくれるものです

2.データセットを用意して、学習用とテスト用に分ける

mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data() 

mnistの中には28×28ピクセルの手書きデータ(0~9)と答えのラベル(0~9)が入っています。

x_trainの最初のデータを見てみると、1枚目のように0~255までの数字が与えられた塊がはいっています。

これを表示させると2枚目のような柄になり、「5」という手書き文字のデータじゃないかなということがわかりますね。

実際に答えのラベル(y_trainの最初のデータ)をみると、「5」というデータが格納されています。

このようなデータがトレーニングデータ(x_train, y_train)には60,000個、テストデータ(x_test, y_test)には10,000個入っています。

3.データの正規化

x_train = tf.keras.utils.normalize(x_train, axis = 1)
x_test = tf.keras.utils.normalize(x_test, axis = 1)

正規化とは簡単にいうと、データを扱いやすく変形しています。その結果精度を見込むことができます。

実際にこの過程を飛ばして学習させてみると学習制度は60%ほどとなり、文字と予想を照らし合わせてみても以下のようになります。

先の出力結果で出した正規化ありの結果よりも結果が悪いのがみて取れます。

4.学習モデルの作成

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128, activation = tf.nn.relu))
model.add(tf.keras.layers.Dense(128, activation = tf.nn.relu))
model.add(tf.keras.layers.Dense(10, activation = tf.nn.softmax))

model.compile(optimizer= "adam",
             loss= "sparse_categorical_crossentropy",
             metrics= ["accuracy"])

2つの隠れ層をもつモデルを作成しました。

細かい説明は省略しますが、ここではどんな風に数字を操作するかや、どんな風に結果を評価していくかを設定しています。

詳細を知りたい場合以下サイトが役に立ちます。

参考 kerasのドキュメントkeras.io

5.学習用データを使ってモデルを学習させる

model.fit(x_train, y_train, epochs=3)

4で作成したモデルに学習用データで学習させていきます。

6.学習させたモデルを評価

val_loss, vall_acc = model.evaluate(x_test, y_test)
print(val_loss, vall_acc)

学習が終わったモデルがどれくらいのパフォーマンスを出すのかをみてみます。

出力は0.09010209596427157 0.9718こんな感じでしたね。

後ろのvall_accの方を見てみると0.9718となっていて97%の制度を出していることが確認できます。

7.予測と画像を出力

predictions = model.predict([x_test])

fig = plt.figure(figsize=(9, 9))
plt.subplots_adjust(wspace=1, hspace=1)
for i in range(9):
  ax = fig.add_subplot(3, 3, 1+i)
  ax. imshow(x_test[i])
  ax.set_title("prediction : {}".format(np.argmax(predictions[i])))
plt.show()

今回作ったモデルが出した予想と、実際のデータを照らし合わせて可視化してみました。

まとめ

今回は細かい説明などはせず、とりあえず機械学習で動くものを作ってみたいという人を対象に(自分の備忘録も含め)この記事を書いてみました。

まるでwordを開いて文章を打つくらいの感覚で、google colabで機械学習ができるということがわかっていただけたら嬉しいです。

これを皮切りに自分で少しずつ数字をいじってみたり、細かいところまで機械学習の勉強へと進んでいく仲間が増えることを願ってます。

ではでは

 

コメントを残す

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