スーツ姿のプロダクトマネージャー

ITで新しいプロダクトを生み出したいすべての人を応援するブログです。

Google ColaboratoryでDeep Learningを動かす

先ほど、Google Colaboratoryを使ってみたという記事を書きました。

次に、これを使ってDeep Learningを動かしてみようということで、私のチームでも人気なKerasを動かしてみます。KerasはDeep Learningのライブラリの一つで、TensorFlowやTheanoなどの更に上で動作する高水準なインターフェースを提供します。

簡素な記述でネットワークを作れることが特徴で、TensorFlowで数行書かないとできないことが、Kerasでは1行で書けてしまいます。初めにニューラルネットワークDeep Learningを学ぶには最適なライブラリだと思います。

昨年末に出版されたKerasの本を購入したので、さっそく試してみました。

Deep Learning with Python



Colaboratory上でKerasを動かすための準備については、以下のページを参考にさせていただきました。

Kerasを動かせるようにする

デフォルトではKerasが動かないようなので、インストールします。
シェルコマンドを使ってあっさりインストールできました。バックエンドでTensorFlowが動いていることがわかります。

!pip install -q keras
from keras.datasets import mnist
Using TensorFlow backend.

Deep Learning with Python」 のサンプルコードを実行する

はじめのネットワークとして、手書き数字画像の認識をやってみます。0~9までの画像がセットになったMNISTデータを使います。
データには、6万枚の教師データと1万枚のテストデータが含まれていて、6万枚の教師データを使って文字を認識するモデルを作り、1万枚のテストデータで評価します。Deep LearningへのHello, World!ですね。本書では、2.1 A first look at a neural network になります。


まず、データを読み込んでみます。

from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
[train_images.shape, test_images.shape]
[(60000, 28, 28), (10000, 28, 28)]


次に、ネットワークを作ります。
本に記載されているコードは、著者のGitHubページで見ることができます。

from keras import models
from keras import layers
network = models.Sequential()
network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))
network.add(layers.Dense(10, activation='softmax'))
#  省略


このモデルを使って学習させてみました。1分以内に終わります。

network.fit(train_images, train_labels, epochs=5, batch_size=128)
Epoch 1/5
60000/60000 [==============================] - 4s 74us/step - loss: 0.2586 - acc: 0.9245
Epoch 2/5
60000/60000 [==============================] - 5s 86us/step - loss: 0.1041 - acc: 0.9696
Epoch 3/5
60000/60000 [==============================] - 5s 86us/step - loss: 0.0681 - acc: 0.9800
Epoch 4/5
60000/60000 [==============================] - 5s 86us/step - loss: 0.0486 - acc: 0.9851
Epoch 5/5
 8320/60000 [===>..........................] - ETA: 4s - loss: 0.0362 - acc: 0.989860000/60000 [==============================] - 5s 86us/step - loss: 0.0377 - acc: 0.9887
<keras.callbacks.History at 0x7f5da74527f0>


次に、テストデータを使って評価をしてみます。

test_loss, test_acc = network.evaluate(test_images, test_labels)
10000/10000 [==============================] - 0s 48us/step


Accuracyが0.98となりましいた。うまく学習できているようです。

print('test_acc:', test_acc)
test_acc: 0.98

GPUを使ってみる

Google Colaboratoryでは、なんとGPUも使うことができます。
GPUを使うためには、ノートブックの設定を変更する必要があります。

上部のメニューから「ランタイム」を開き、「ランタイムのタイプを変更」を選択します。
ダイアログが表示されるので、ハードウェアアクセラレータを「GPU」に変更して保存します。
f:id:ku2t:20180311165744p:plain


もう一度学習処理を実行してみます。速くなりました。

network.fit(train_images, train_labels, epochs=5, batch_size=128)
Epoch 1/5
60000/60000 [==============================] - 2s 37us/step - loss: 0.2571 - acc: 0.9255
Epoch 2/5
60000/60000 [==============================] - 2s 36us/step - loss: 0.1044 - acc: 0.9691
Epoch 3/5
60000/60000 [==============================] - 2s 36us/step - loss: 0.0688 - acc: 0.9788
Epoch 4/5
60000/60000 [==============================] - 2s 36us/step - loss: 0.0507 - acc: 0.9851
Epoch 5/5
60000/60000 [==============================] - 2s 36us/step - loss: 0.0369 - acc: 0.9889
<keras.callbacks.History at 0x7f67c8f93048>


連続使用時間に制限があるようですが、GPUまで使えるとはなんと太っ腹でしょうか。
いつまでこの状況が続くのかわからないのですが、個人が学習用途に使うには、十分すぎる環境でしょう。

Deep Learning with Python

Deep Learning with Python