はじめてのColaboratory

ビッグデータやデータサイエンス、そしてAIという言葉も定着してきました。 機械学習のコモディティ化が進み、今や誰でも簡単に機械学習を体験出来るようになってきています。

本記事では機械学習の環境を容易に利用でき、さらに強力な計算資源を利用できる、Google ColabことColaboratoryについて取り上げたいと思います。 Colaboratoryは教育と研究を目的として提供されている機械学習のツールで、無料で利用できます。 Colaboratoryには次のような特徴があります。

  1. Jupyter Notebookを元に作られています。
  2. GPUを使用することができます。1
  3. Google Driveに保存され、GoogleスプレッドシートやGoogleドキュメント等と同様に共同編集することができます。

せっかくなので、本記事では機械学習では定番のMNIST(手書き数字の認識)をやってみたいと思います。 今回のサンプルノートブックはこちらにあります。

Colaboratoryの起動

Googleスプレッドシートなどと同様で、Colaboratoryにアクセスすれば利用することが出来ます。 ブラウザについてはChromeとFirefoxには対応しているとよくある質問あります。 起動後にはチュートリアルのノートブックを選ぶことも出来ますし、新規にノートブックを作ることも出来ます。

Jupyter Notebookはセルにコードを書いて、Shift + Enterで実行することが出来ます。 さらに、!を最初に書くと、シェルで実行することが出来ます。 例えば、

!cat /proc/cpuinfo

と入力して実行すればCPUに関する情報を見られます。

GPUを利用する方法

まず、「編集」タブの中にある「ノートブックの設定」をクリックします。

次に、「ハードウェア アクセラレータ」をGPUに変更します。

ちなみに、ここでランタイムのタイプをPython2に変更するとPython2を使うことも出来ます。 RやJuliaなどはこの記事を執筆している段階では対応していません。

MNIST(手書き文字)

今回はtf.kerasを使います。 TensorFlowはデフォルトで使えるので問題にならないですが、 デフォルトで入ってないものを使いたい場合でもpipapt-getを用いてインストールすることが出来ます。

コードはKerasのexampleのものを参考にしています。

とりあえずまずはTensorFlowをimportしましょう。

import tensorflow as tf

次にMNISTのデータセットをロードします。 データは学習データとテストデータに分かれています。 学習データで学習を行ない、学習で用いなかったテストデータの予測を行ないます。

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

それでは学習データがどんなものか確認してみましょう。一番最初のデータは次のようになっています。

出力が長くてスクショを取ったときに切れてしまっていますが、出力はこんな感じです。 60000個のデータがあってそれぞれのデータは28 × 28の二次元配列になっています。 0以上255以下の数字が並んでいますが、これだけではよくわからないですね。 ということで可視化してみます。

さっきのデータは見た的には5のようです。 実際に確認してみると、

確かに5でした。こんな感じで手書きの数字を表す二次元の配列とその答え(ラベル)がセットになっているわけです。

from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Conv2D
from tensorflow.python.keras.layers import MaxPooling2D
from tensorflow.python.keras.layers import Dropout
from tensorflow.python.keras.layers import Flatten
from tensorflow.python.keras.layers import Dense

batch_size = 128
num_classes = 10
epochs = 12

img_rows, img_cols = 28, 28

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

x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255

y_train = tf.keras.utils.to_categorical(y_train, num_classes)
y_test = tf.keras.utils.to_categorical(y_test, num_classes)

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss=tf.keras.losses.categorical_crossentropy,
              optimizer=tf.keras.optimizers.Adadelta(),
              metrics=['accuracy'])

model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=0,
          validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

99%以上の精度でテストデータを予測することが出来ました。 今回の記事ではKerasを解説することは目標にはしていないので、コードの解説は省略します。

ちなみにこのサンプルコードはテストデータでバリデーションしてるのであまりよろしくないです。 良い子は真似しないように…

ファイルを保存する

Colaboratoryではファイルをアップロードしたり、作成したファイルをダウンロードするライブラリが提供されています。

アップロードは

from google.colab import files
uploaded = files.upload()

で行ない、ダウンロードは

from google.colab import files
files.download('{File Name}')

とすることで出来ます。

まとめ

いかがでしたか。 Colaboratoryはパワフルで便利なツールです。 いろいろと面白いことが出来ると思いますので、ぜひご活用ください。


  1. 機械学習、特にディープラーニングにおいては膨大な行列計算を行なうため計算資源としてGPU(Graphics Processing Unit)を利用することが多いです。

0 件のコメント :

コメントを投稿