Google Colaboratory를 사용하여 MNIST 데이터 학습 등을 해본다 ①

6001 단어 colaboratoryCNNMNIST

소개



전부터 궁금했던 Google Colaboratory를 사용해보기로 했습니다.
처음이라고 해도, 다소 실천적인 것을 하고 싶기 때문에, MNIST 데이터를 사용한 CNN 모델의 작성과, LIME를 사용한 설명 가능성을 해 보고 싶습니다.

Colaboratory를 사용할 때의 일반적인 설명은 아래를 참조하십시오.
【초속으로 무료 GPU 사용】 심층 학습 실천 Tips on Colaboratory

Google 드라이브에 Colaboratory 연결



저는 Google 드라이브에 취미 파일을 올리고 있기 때문에 여기에서 작업하는 기본 위치입니다.

Google Drive에서 +New를 클릭한 다음 Connect more apps를 선택합니다.



그런 다음 공동 작업을 검색하고 '연결'을 클릭하여 Google 드라이브에서 공동 작업을 사용할 수 있습니다.


그러면 새 파일을 만드는 "+New"에서 Colaboratory용 파일을 선택할 수 있습니다.
새 빈 ipynb 파일을 빠르게 만듭니다.


런타임 유형을 GPU로 변경하는 것을 잊지 마십시오.




CNN 코드 작성



이 파일에,
Keras 공식 CNN MNIST 페이지 에 있는 코드를 기재합니다.
우선은 keras의 임포트, MNIST 데이터에의 전처리, 그리고 CNN 모델의 정의까지.
from __future__ import print_function
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
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 = keras.utils.to_categorical(y_train, num_classes)
y_test = 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=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

공식 페이지의 코드가 끝나면 모델의 구조가 출력되지 않으므로 다음 코드를 추가했습니다.
model.summary()

이러한 모델이 만들어졌습니다.


조속히 실행하자. 학습의 이력을 나중에 표시할 수 있도록 Keras 공식 페이지의 코드에 조금만 손을 더하고 있습니다.
%%time
history = model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          validation_data=(x_test, y_test))

다음과 같은 결과를 얻었습니다.


1분 미만으로 계산이 끝났습니다!
나머지는 모델의 정밀도 검증과 학습 이력의 표시입니다.
# モデルの評価
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

Test loss: 0.027914887178201026
Test accuracy: 0.9934

테스트 데이터에 대한 정밀도는 99.34% 나오네요.
import matplotlib.pyplot as plt
# 学習の履歴をグラフ化
plt.plot(history.history['acc'])
plt.plot(history.history['val_acc'])
plt.title('Accuracy')
plt.legend(['train', 'test'], loc='upper left')
plt.show()



테스트 데이터에 대해서도 최초의 에포크로부터 나름의 결과가 나오고 있군요.

내 로컬 PC와 비교



그렇다고해도 무료로 GPU를 사용할 수 있고, 이 속도로 계산할 수 있는 것은 대단합니다.
덧붙여서, 같은 코드를 내 PC (XPS13, Intel CORE i5이므로 비교 대상으로 빈약하지만,,)의 결과는


제 PC에서는 약 1시간 20분 정도 걸립니다. 공동체는 80배 빠르다!
가벼운 데이터로 심층 학습을 여러 가지 시도한다면 Colaboratory를 사용하는 것이 시간을 절약합니다.

이번은 여기까지.
다음 번에는 모델 표현식을 저장하거나 LIME을 적용하고 싶습니다.

좋은 웹페이지 즐겨찾기