Created
June 1, 2018 15:27
-
-
Save koshian2/7a261cfe2ac198ebd41ccb32333c6653 to your computer and use it in GitHub Desktop.
CIFAR-10
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import numpy as np | |
import matplotlib.pyplot as plt | |
import time | |
from keras.applications.vgg16 import VGG16 | |
from keras.models import Sequential, Model | |
from keras.layers import Dense, Flatten | |
from keras.optimizers import Adam | |
from keras.datasets import cifar10 | |
from keras.utils.np_utils import to_categorical | |
start_time = time.time() | |
# データの読み込み | |
(x_train_orig, y_train), (x_test_orig, y_test) = cifar10.load_data() | |
# 小数化 | |
x_train_orig = x_train_orig / 255.0 | |
x_test_orig = x_test_orig / 255.0 | |
# データ数 | |
m_train, m_test = x_train_orig.shape[0], x_test_orig.shape[0] | |
# yをOneHotVector化 | |
y_train, y_test = to_categorical(y_train), to_categorical(y_test) | |
# VGG16に読み込めるように32x32→64x64にリサイズ | |
x_train, x_test = np.zeros((m_train, 64, 64, 3), dtype="float"), np.zeros((m_test, 64, 64, 3), dtype="float") | |
# Nearest-Neighbor | |
for i in range(x_train_orig.shape[1]): | |
for j in range(x_train_orig.shape[2]): | |
x_train[:, i*2, j*2, :] = x_train_orig[:, i, j, :] | |
x_train[:, i*2, j*2+1, :] = x_train_orig[:, i, j, :] | |
x_train[:, i*2+1, j*2, :] = x_train_orig[:, i, j, :] | |
x_train[:, i*2+1, j*2+1, :] = x_train_orig[:, i, j, :] | |
x_test[:, i*2, j*2, :] = x_test_orig[:, i, j, :] | |
x_test[:, i*2, j*2+1, :] = x_test_orig[:, i, j, :] | |
x_test[:, i*2+1, j*2, :] = x_test_orig[:, i, j, :] | |
x_test[:, i*2+1, j*2+1, :] = x_test_orig[:, i, j, :] | |
# メモリばかぐいするのでオリジナルを解法 | |
x_test_orig, x_train_orig = None, None | |
# VGG16の読み込み | |
base_model = VGG16(include_top=False, input_shape=x_train.shape[1:]) | |
# 転移学習用にVGGを訓練不可にする | |
for layer in base_model.layers: | |
layer.trainable = False | |
# Flatten以降を作る | |
top_model = Sequential() | |
top_model.add(Flatten(input_shape=base_model.output_shape[1:])) | |
top_model.add(Dense(100, activation="relu")) | |
top_model.add(Dense(10, activation="softmax")) | |
# モデルを結合する | |
model = Model(input=base_model.input, output=top_model(base_model.output)) | |
# コンパイル | |
model.compile(optimizer=Adam(), loss="categorical_crossentropy", metrics=["accuracy"]) | |
# フィット | |
history = model.fit(x_train, y_train, batch_size=64, epochs=25).history | |
# 経過時間 | |
print("Elapsed[s] : ", time.time() - start_time) | |
# テスト精度 | |
test_eval = model.evaluate(x_test, y_test) | |
print("train accuracy :", history["acc"][-1]) | |
print("test accuracy :", test_eval[1]) | |
# 訓練誤差のプロット | |
plt.plot(range(len(history["loss"])), history["loss"], marker=".") | |
plt.show() | |
# 2 epoch | |
#Elapsed[s] : 4225.965629577637 | |
#10000/10000 [==============================] - 419s 42ms/step | |
#train accuracy : 0.70494 | |
#test accuracy : 0.6898 | |
# 25 epoch | |
#acc: 0.9172 | |
#Elapsed[s] : 55869.90407681465 | |
#10000/10000 [==============================] - 459s 46ms/step | |
#train accuracy : 0.91724 | |
#test accuracy : 0.6987 | |
#_________________________________________________________________ | |
#Layer (type) Output Shape Param # | |
#================================================================= | |
#input_1 (InputLayer) (None, 64, 64, 3) 0 | |
#_________________________________________________________________ | |
#block1_conv1 (Conv2D) (None, 64, 64, 64) 1792 | |
#_________________________________________________________________ | |
#block1_conv2 (Conv2D) (None, 64, 64, 64) 36928 | |
#_________________________________________________________________ | |
#block1_pool (MaxPooling2D) (None, 32, 32, 64) 0 | |
#_________________________________________________________________ | |
#block2_conv1 (Conv2D) (None, 32, 32, 128) 73856 | |
#_________________________________________________________________ | |
#block2_conv2 (Conv2D) (None, 32, 32, 128) 147584 | |
#_________________________________________________________________ | |
#block2_pool (MaxPooling2D) (None, 16, 16, 128) 0 | |
#_________________________________________________________________ | |
#block3_conv1 (Conv2D) (None, 16, 16, 256) 295168 | |
#_________________________________________________________________ | |
#block3_conv2 (Conv2D) (None, 16, 16, 256) 590080 | |
#_________________________________________________________________ | |
#block3_conv3 (Conv2D) (None, 16, 16, 256) 590080 | |
#_________________________________________________________________ | |
#block3_pool (MaxPooling2D) (None, 8, 8, 256) 0 | |
#_________________________________________________________________ | |
#block4_conv1 (Conv2D) (None, 8, 8, 512) 1180160 | |
#_________________________________________________________________ | |
#block4_conv2 (Conv2D) (None, 8, 8, 512) 2359808 | |
#_________________________________________________________________ | |
#block4_conv3 (Conv2D) (None, 8, 8, 512) 2359808 | |
#_________________________________________________________________ | |
#block4_pool (MaxPooling2D) (None, 4, 4, 512) 0 | |
#_________________________________________________________________ | |
#block5_conv1 (Conv2D) (None, 4, 4, 512) 2359808 | |
#_________________________________________________________________ | |
#block5_conv2 (Conv2D) (None, 4, 4, 512) 2359808 | |
#_________________________________________________________________ | |
#block5_conv3 (Conv2D) (None, 4, 4, 512) 2359808 | |
#_________________________________________________________________ | |
#block5_pool (MaxPooling2D) (None, 2, 2, 512) 0 | |
#_________________________________________________________________ | |
#sequential_1 (Sequential) (None, 10) 205910 | |
#================================================================= | |
#Total params: 14,920,598 | |
#Trainable params: 205,910 | |
#Non-trainable params: 14,714,688 | |
#_________________________________________________________________ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment