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을 적용하고 싶습니다.
Reference
이 문제에 관하여(Google Colaboratory를 사용하여 MNIST 데이터 학습 등을 해본다 ①), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shinji_komine/items/fc251163fc32efc500e9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
저는 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을 적용하고 싶습니다.
Reference
이 문제에 관하여(Google Colaboratory를 사용하여 MNIST 데이터 학습 등을 해본다 ①), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shinji_komine/items/fc251163fc32efc500e9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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()
%%time
history = 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])
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()
그렇다고해도 무료로 GPU를 사용할 수 있고, 이 속도로 계산할 수 있는 것은 대단합니다.
덧붙여서, 같은 코드를 내 PC (XPS13, Intel CORE i5이므로 비교 대상으로 빈약하지만,,)의 결과는
제 PC에서는 약 1시간 20분 정도 걸립니다. 공동체는 80배 빠르다!
가벼운 데이터로 심층 학습을 여러 가지 시도한다면 Colaboratory를 사용하는 것이 시간을 절약합니다.
이번은 여기까지.
다음 번에는 모델 표현식을 저장하거나 LIME을 적용하고 싶습니다.
Reference
이 문제에 관하여(Google Colaboratory를 사용하여 MNIST 데이터 학습 등을 해본다 ①), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shinji_komine/items/fc251163fc32efc500e9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)