【Google Colaboratoryを試してみた】

はじめに

こんにちは、がんがんです。
普段学校ではUbuntuGPUを使用しています。自宅PCのWindowsでもGPUが使えたらなーと思っていました。
そんな矢先、Jupyter Notebookについて調べているときにGoogle Colaboratoryに出会いました。

自宅にいてもGPUを使って実験できるように今回はGoogle Colaboratory(以下、Google Colab)を試してみました。そのときの備忘録です。

とりあえずPythonを使ってみる

こちらを参考にPythonを使ってみます。GPUはもちろんONにしています。
Google Colabを導入 - Qiita

しっかりとPython3系が動いています。
f:id:gangannikki:20181113020225p:plain

ライブラリを確認する

以下のコマンドでライブラリを確認します。!

!pip list

f:id:gangannikki:20181113020422p:plain

MNISTを試してみる

Google Colaboratoryの無料GPU環境を使ってみた – MISO

こちらを参考にしてMNISTを試していきます。
コードは以下の通りです。

from __future__ import print_function
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
from keras.utils import to_categorical
from keras.optimizers import Adadelta
from keras import backend as K

batch_size = 128
num_classes = 10
epochs = 12

#  input image dimensions
img_rows, img_cols = 28, 28

#  the data, split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()

if K.image_data_format() == "channels_first":
  x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
  x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
  input_shape = (1, img_rows, img_cols)
else:
  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.

print("x_train shape:", x_train.shape)
print(x_train.shape[0], "train samples")
print(x_test.shape[0], "test samples")

#  convert class vectors to binary class matrices
y_train = to_categorical(y_train, num_classes)
y_test = to_categorical(y_test, num_classes)

"""
  モデル構築
"""
model = Sequential()
model.add(Conv2D(32, 3, activation="relu", input_shape=input_shape))
model.add(Conv2D(64, 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="categorical_crossentropy",
              optimizer=Adadelta(),
              metrics=["accuracy"])

"""
  モデル学習
"""
model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          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])

実行結果はこちらです。

x_train shape: (60000, 28, 28, 1)
60000 train samples
10000 test samples
Train on 60000 samples, validate on 10000 samples
Epoch 1/12
60000/60000 [==============================] - 12s 201us/step - loss: 0.2687 - acc: 0.9178 - val_loss: 0.0630 - val_acc: 0.9803
Epoch 2/12
60000/60000 [==============================] - 9s 148us/step - loss: 0.0893 - acc: 0.9739 - val_loss: 0.0444 - val_acc: 0.9844
Epoch 3/12
60000/60000 [==============================] - 9s 148us/step - loss: 0.0663 - acc: 0.9803 - val_loss: 0.0392 - val_acc: 0.9876
Epoch 4/12
60000/60000 [==============================] - 9s 148us/step - loss: 0.0548 - acc: 0.9835 - val_loss: 0.0355 - val_acc: 0.9881
Epoch 5/12
60000/60000 [==============================] - 9s 148us/step - loss: 0.0474 - acc: 0.9858 - val_loss: 0.0304 - val_acc: 0.9900
Epoch 6/12
60000/60000 [==============================] - 9s 148us/step - loss: 0.0423 - acc: 0.9877 - val_loss: 0.0279 - val_acc: 0.9906
Epoch 7/12
60000/60000 [==============================] - 9s 148us/step - loss: 0.0389 - acc: 0.9880 - val_loss: 0.0287 - val_acc: 0.9906
Epoch 8/12
60000/60000 [==============================] - 9s 148us/step - loss: 0.0338 - acc: 0.9897 - val_loss: 0.0295 - val_acc: 0.9905
Epoch 9/12
60000/60000 [==============================] - 9s 148us/step - loss: 0.0311 - acc: 0.9903 - val_loss: 0.0285 - val_acc: 0.9904
Epoch 10/12
60000/60000 [==============================] - 9s 148us/step - loss: 0.0314 - acc: 0.9911 - val_loss: 0.0293 - val_acc: 0.9901
Epoch 11/12
60000/60000 [==============================] - 9s 148us/step - loss: 0.0283 - acc: 0.9914 - val_loss: 0.0267 - val_acc: 0.9911
Epoch 12/12
60000/60000 [==============================] - 9s 147us/step - loss: 0.0288 - acc: 0.9910 - val_loss: 0.0277 - val_acc: 0.9912
Test loss: 0.02774012076819454
Test accuracy: 0.9912

ちゃんと学習できていますね。よかったよかった。

まとめ

無事にGoogle Colabを使うことが出来ました。作ったノートは貼っておくので参考までにどうぞ。
https://colab.research.google.com/drive/1Lc-a1BJJp8L96KpE-MvkJJTh8h6bn1Cc

無事に動いたので、次回はJupyter Notebookに書いたままの画風変換を動かしていきます。