LoginSignup
12
13

More than 5 years have passed since last update.

Google colaboratoryを試してみる(Keras & MNIST)

Last updated at Posted at 2018-04-07

無料で高性能なGPUが使える!とのことなので、触ってみました。

とりあえず、動くことを確認するのが目的なので、シンプルなKerasのネットワークとMNISTデータセットを使用します。

colaboratoryでまずは設定

colaboratoryにアクセスしたところ、すぐにノートが書ける状態になった。

さらに、元々プライベートでGoogle Driveの安いプランを使っていたので、自動的にそちらに保存される模様。

やった設定としては、ノートを新規で作成して、「編集」→「ハードウェア アクセラレータ」をGPUに変更したのみ。

手軽さがやばい。

Kerasのコードを書いてみる

ノートブックはPython2.7を選択。(3系でも動かせそうな気もするものの、念のため)

ノートのhinterland的な機能の有効化の仕方がわからなかったため、Azure Notebooksで先に書いて、それを持ってくる形で対応。(入力候補が無いと書きづらい・・)

from keras import backend as K
from keras.models import Sequential
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.layers.core import Activation
from keras.layers.core import Flatten
from keras.layers.core import Dense
from keras.datasets import mnist
from keras.utils import np_utils
from keras.optimizers import Adam
import numpy as np
Using TensorFlow backend.
INPUT_SHAPE = (1, 28, 28)
CLASSES_NUM = 10
EPOCH_NUM = 20
BATCH_SIZE = 128
K.set_image_dim_ordering('th')
model = Sequential()

model.add(
    Conv2D(filters=20, kernel_size=5, padding='same',
           input_shape=INPUT_SHAPE))
model.add(Activation('relu'))
model.add(
    MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))

model.add(
    Conv2D(filters=50, kernel_size=5, padding='same'))
model.add(Activation('relu'))
model.add(
    MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))

model.add(Flatten())
model.add(Dense(500))
model.add(Activation('relu'))

model.add(Dense(units=CLASSES_NUM))
model.add(Activation('softmax'))
(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
x_train.shape
(60000, 28, 28)
x_train = x_train[:, np.newaxis, :, :]
x_test = x_test[:, np.newaxis, :, :]
y_train = np_utils.to_categorical(
    y=y_train, num_classes=CLASSES_NUM)
y_test = np_utils.to_categorical(
    y=y_test, num_classes=CLASSES_NUM)
model.compile(
    loss='categorical_crossentropy', optimizer=Adam(), metrics=['accuracy'])
history = model.fit(
    x=x_train, y=y_train, batch_size=BATCH_SIZE,
    epochs=EPOCH_NUM, verbose=2, validation_split=0.2)
Train on 48000 samples, validate on 12000 samples
Epoch 1/20
 - 7s - loss: 0.1897 - acc: 0.9428 - val_loss: 0.0642 - val_acc: 0.9813
Epoch 2/20
 - 6s - loss: 0.0475 - acc: 0.9851 - val_loss: 0.0459 - val_acc: 0.9862
Epoch 3/20
 - 6s - loss: 0.0317 - acc: 0.9899 - val_loss: 0.0428 - val_acc: 0.9877
Epoch 4/20
 - 6s - loss: 0.0225 - acc: 0.9930 - val_loss: 0.0354 - val_acc: 0.9903
Epoch 5/20
 - 6s - loss: 0.0168 - acc: 0.9945 - val_loss: 0.0373 - val_acc: 0.9908
Epoch 6/20
 - 6s - loss: 0.0137 - acc: 0.9952 - val_loss: 0.0323 - val_acc: 0.9911
Epoch 7/20
 - 6s - loss: 0.0087 - acc: 0.9972 - val_loss: 0.0429 - val_acc: 0.9891
Epoch 8/20
 - 6s - loss: 0.0094 - acc: 0.9967 - val_loss: 0.0343 - val_acc: 0.9923
Epoch 9/20
 - 6s - loss: 0.0088 - acc: 0.9968 - val_loss: 0.0379 - val_acc: 0.9910
Epoch 10/20
 - 6s - loss: 0.0067 - acc: 0.9977 - val_loss: 0.0336 - val_acc: 0.9913
Epoch 11/20
 - 6s - loss: 0.0033 - acc: 0.9990 - val_loss: 0.0499 - val_acc: 0.9890
Epoch 12/20
 - 6s - loss: 0.0048 - acc: 0.9984 - val_loss: 0.0434 - val_acc: 0.9897
Epoch 13/20
 - 6s - loss: 0.0062 - acc: 0.9981 - val_loss: 0.0358 - val_acc: 0.9914
Epoch 14/20
 - 6s - loss: 0.0052 - acc: 0.9982 - val_loss: 0.0426 - val_acc: 0.9904
Epoch 15/20
 - 6s - loss: 0.0063 - acc: 0.9979 - val_loss: 0.0435 - val_acc: 0.9905
Epoch 16/20
 - 6s - loss: 0.0044 - acc: 0.9985 - val_loss: 0.0383 - val_acc: 0.9929
Epoch 17/20
 - 6s - loss: 0.0028 - acc: 0.9992 - val_loss: 0.0473 - val_acc: 0.9907
Epoch 18/20
 - 6s - loss: 0.0019 - acc: 0.9994 - val_loss: 0.0423 - val_acc: 0.9917
Epoch 19/20
 - 6s - loss: 0.0021 - acc: 0.9994 - val_loss: 0.0489 - val_acc: 0.9906
Epoch 20/20
 - 6s - loss: 0.0060 - acc: 0.9981 - val_loss: 0.0397 - val_acc: 0.9922

特につまづくことなく動いた。

感想

  • 手軽すぎてやばい。
  • 以前、古いPCに緊張しながらGPUを差したり、WindowsをUbuntuにしたりしていていたのは何だったのか・・
  • そして、新しいPCではTensorflowインストールだったり、GPUの環境的なエラーに悩まされることが多かったのが、何もつまづくことなくストレートにディープラーニングが動いた。
  • colaboratoryすごい。
12
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13