2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ใ€Œใ‚ผใƒญใ‹ใ‚‰ไฝœใ‚‹Deep Learningใ€่‡ช็ฟ’ใƒกใƒข๏ผˆใใฎ1๏ผ—๏ผ‰DeepConvNet ใ‚’ Keras ใงๆง‹็ฏ‰ใ—ใฆใฟใŸ

2
Last updated at Posted at 2020-11-13

ใ€Œใ‚ผใƒญใ‹ใ‚‰ไฝœใ‚‹Deep Learningใ€(ๆ–Ž่—ค ๅบทๆฏ…ใ€€่‘—ใ€€ใ‚ชใƒฉใ‚คใƒชใƒผใƒปใ‚ธใƒฃใƒ‘ใƒณๅˆŠ)ใ‚’่ชญใ‚“ใงใ„ใ‚‹ๆ™‚ใซใ€ๅ‚็…งใ—ใŸใ‚ตใ‚คใƒˆ็ญ‰ใ‚’ใƒกใƒขใ—ใฆใ„ใใพใ™ใ€‚ใ€€ใใฎ๏ผ‘๏ผ– โ† โ†’ใใฎ๏ผ‘๏ผ˜

DeepConvNet

ๆœฌใฎP241ใ‹ใ‚‰่ชฌๆ˜Žใ•ใ‚Œใฆใ„ใ‚‹ DeepConvNet ใ‚’ Keras ใงๆง‹็ฏ‰ใ—ใฆใฟใพใ™ใ€‚

g8-1.jpg

ใƒฌใ‚คใƒคใŒใ‚„ใŸใ‚‰ๅคšใใชใฃใฆใ€ใใ“ใ‚“ใจใ“ใŒใƒ‡ใ‚ฃใƒผใƒ—ใชใ‚“ใ ใ‚ใ†ใจใฏๆ€ใ„ใพใ™ใŒใ€ใ“ใ‚Œใงใฉใ†ใ—ใฆ่ช่ญ˜็ฒพๅบฆใŒไธŠใŒใ‚‹ใฎใ‹ใ€ใพใฃใŸใใ‚ใ‹ใฃใฆใ„ใพใ›ใ‚“ใ€‚

ใŒ

่ฆ‹ๆœฌใฎใ‚นใ‚ฏใƒชใƒ—ใƒˆใ‚’ใพใญใฆๅ‹•ใ‹ใ™ใ“ใจใฏใงใใ‚‹ใ‚ใ‘ใงใ€

ใ‚„ใฃใฆใฟใพใ—ใŸใ€‚

from google.colab import drive
drive.mount('/content/drive')

import sys, os
sys.path.append('/content/drive/My Drive/Colab Notebooks/deep_learning/common')
sys.path.append('/content/drive/My Drive/Colab Notebooks/deep_learning/dataset')

# TensorFlow ใจ tf.keras ใฎใ‚คใƒณใƒใƒผใƒˆ
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from keras.layers import Dense, Activation, Flatten, Conv2D, MaxPooling2D, Dropout

# ใƒ˜ใƒซใƒ‘ใƒผใƒฉใ‚คใƒ–ใƒฉใƒชใฎใ‚คใƒณใƒใƒผใƒˆ
import numpy as np
import matplotlib.pyplot as plt

from mnist import load_mnist
# ใƒ‡ใƒผใ‚ฟใฎ่ชญใฟ่พผใฟ
(x_train, t_train), (x_test, t_test) = load_mnist(flatten=False)
X_train = x_train.transpose(0,2,3,1)
X_test = x_test.transpose(0,2,3,1)
input_shape=(28,28,1)
filter_num = 16
filter_size = 3
filter_stride = 1
filter_num2 = 32
filter_num3 = 64
pool_size_h=2
pool_size_w=2
pool_stride=2
d_rate = 0.5
hidden_size=100
output_size=10

model = keras.Sequential(name="DeepConvNet")
model.add(keras.Input(shape=input_shape))
model.add(Conv2D(filter_num, filter_size, strides=filter_stride, padding="same", activation="relu", kernel_initializer='he_normal'))
model.add(Conv2D(filter_num, filter_size, strides=filter_stride, padding="same", activation="relu", kernel_initializer='he_normal'))
model.add(MaxPooling2D(pool_size=(pool_size_h, pool_size_w),strides=pool_stride))

model.add(Conv2D(filter_num2, filter_size, strides=filter_stride, padding="same", activation="relu", kernel_initializer='he_normal'))
model.add(Conv2D(filter_num2, filter_size, strides=filter_stride, padding="same", activation="relu", kernel_initializer='he_normal'))
model.add(MaxPooling2D(pool_size=(pool_size_h, pool_size_w),strides=pool_stride))

model.add(Conv2D(filter_num3, filter_size, strides=filter_stride, padding="same", activation="relu", kernel_initializer='he_normal'))
model.add(Conv2D(filter_num3, filter_size, strides=filter_stride, padding="same", activation="relu", kernel_initializer='he_normal'))
model.add(MaxPooling2D(pool_size=(pool_size_h, pool_size_w),strides=pool_stride))

model.add(keras.layers.Flatten())
model.add(Dense(hidden_size, activation="relu", kernel_initializer='he_normal')) 
model.add(Dropout(d_rate))
model.add(Dense(output_size))
model.add(Dropout(d_rate))
model.add(Activation("softmax")) 

# ใƒขใƒ‡ใƒซใฎใ‚ณใƒณใƒ‘ใ‚คใƒซ
model.compile(loss="sparse_categorical_crossentropy", 
              optimizer="adam", 
              metrics=["accuracy"])

padding="same" ใจใ„ใ†ๆŒ‡ๅฎšใ‚’ๅ…ฅใ‚Œใ‚‹ใ“ใจใงใ€ๅ…ฅๅŠ›็”ปๅƒใฎใ‚ตใ‚คใ‚บใจๅŒใ˜ใ‚ตใ‚คใ‚บใฎๅ‡บๅŠ›็”ปๅƒใซใชใ‚Šใพใ™ใ€‚

model.summary()

Model: "DeepConvNet"
Layer (type)ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€Output Shapeใ€€ใ€€ใ€€ใ€€ใ€€ใ€€Param #


conv2d (Conv2D)ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€(None, 28, 28, 16)ใ€€ใ€€ใ€€ใ€€160
conv2d_1 (Conv2D)ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€(None, 28, 28, 16)ใ€€ใ€€ใ€€ใ€€2320
max_pooling2d (MaxPooling2D)ใ€€(None, 14, 14, 16)ใ€€ใ€€ใ€€ใ€€0
conv2d_2 (Conv2D)ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€(None, 14, 14, 32)ใ€€ใ€€ใ€€ใ€€4640
conv2d_3 (Conv2D)ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€(None, 14, 14, 32)ใ€€ใ€€ใ€€ใ€€9248
max_pooling2d_1 (MaxPooling2ใ€€(None, 7, 7, 32)ใ€€ใ€€ใ€€ใ€€ใ€€0
conv2d_4 (Conv2D)ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€(None, 7, 7, 64)ใ€€ใ€€ใ€€ใ€€ใ€€18496
conv2d_5 (Conv2D)ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€(None, 7, 7, 64)ใ€€ใ€€ใ€€ใ€€ใ€€36928
max_pooling2d_2 (MaxPooling2ใ€€(None, 3, 3, 64)ใ€€ใ€€ใ€€ใ€€ใ€€0
flatten (Flatten)ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€(None, 576)ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€0
dense (Dense)ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€(None, 100)ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€57700
dropout (Dropout)ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€(None, 100)ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€0
dense_1 (Dense)ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€(None, 10)ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€1010
dropout_1 (Dropout)ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€(None, 10)ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€0
activation (Activation)ใ€€ใ€€ใ€€ใ€€(None, 10)ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€ใ€€0


Total params: 130,502
Trainable params: 130,502
Non-trainable params: 0

model.fit(X_train, t_train,  epochs=5, batch_size=128)
test_loss, test_acc = model.evaluate(X_test,  t_test, verbose=2)
print('\nTest accuracy:', test_acc)

313/313 - 6s - loss: 0.0313 - accuracy: 0.9902
Test accuracy: 0.9901999831199646

ใกใ‚ƒใ‚“ใจๅ‹•ใ„ใฆใ„ใ‚‹ใ‚ˆใ†ใงใ™ใ€‚

ใƒขใƒ‡ใƒซใฎไฟๅญ˜

save_file = '/content/drive/My Drive/Colab Notebooks/deep_learning/dataset/DeepConvNet_weight'  
model.save_weights(save_file)

ไฟๅญ˜ใ—ใŸใƒขใƒ‡ใƒซใฎๅพฉๅ…ƒ

# TensorFlow ใจ tf.keras ใฎใ‚คใƒณใƒใƒผใƒˆ
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from keras.layers import Dense, Activation, Flatten, Conv2D, MaxPooling2D, Dropout

# ใƒ˜ใƒซใƒ‘ใƒผใƒฉใ‚คใƒ–ใƒฉใƒชใฎใ‚คใƒณใƒใƒผใƒˆ
import numpy as np
import matplotlib.pyplot as plt

def create_model():
  import numpy as np
  import matplotlib.pyplot as plt

  input_shape=(28,28,1)
  filter_num = 16
  filter_size = 3
  filter_stride = 1
  filter_num2 = 32
  filter_num3 = 64
  pool_size_h=2
  pool_size_w=2
  pool_stride=2
  hidden_size=100
  output_size=10

  model = keras.Sequential(name="DeepConvNet")
  model.add(keras.Input(shape=input_shape))
  model.add(Conv2D(filter_num, filter_size, strides=filter_stride, padding="same", activation="relu", kernel_initializer='he_normal'))
  model.add(Conv2D(filter_num, filter_size, strides=filter_stride, padding="same", activation="relu", kernel_initializer='he_normal'))
  model.add(MaxPooling2D(pool_size=(pool_size_h, pool_size_w),strides=pool_stride))

  model.add(Conv2D(filter_num2, filter_size, strides=filter_stride, padding="same", activation="relu", kernel_initializer='he_normal'))
  model.add(Conv2D(filter_num2, filter_size, strides=filter_stride, padding="same", activation="relu", kernel_initializer='he_normal'))
  model.add(MaxPooling2D(pool_size=(pool_size_h, pool_size_w),strides=pool_stride))

  model.add(Conv2D(filter_num3, filter_size, strides=filter_stride, padding="same", activation="relu", kernel_initializer='he_normal'))
  model.add(Conv2D(filter_num3, filter_size, strides=filter_stride, padding="same", activation="relu", kernel_initializer='he_normal'))
  model.add(MaxPooling2D(pool_size=(pool_size_h, pool_size_w),strides=pool_stride))

  model.add(keras.layers.Flatten())
  model.add(Dense(hidden_size, activation="relu", kernel_initializer='he_normal')) 
  model.add(Dropout(0.5))
  model.add(Dense(output_size))
  model.add(Dropout(0.5))
  model.add(Activation("softmax")) 

  #ใƒขใƒ‡ใƒซใฎใ‚ณใƒณใƒ‘ใ‚คใƒซ
  model.compile(loss="sparse_categorical_crossentropy", 
                optimizer="adam", 
                metrics=["accuracy"])

  return model

model = create_model()
save_file = '/content/drive/My Drive/Colab Notebooks/deep_learning/dataset/DeepConvNet_weight'  
model.load_weights(save_file)
model.summary()

ใ€€ใใฎ๏ผ‘๏ผ– โ† โ†’ใใฎ๏ผ‘๏ผ˜
ใƒกใƒขใฎ็›ฎๆฌก็ญ‰ใฏใ“ใกใ‚‰ใ‹ใ‚‰ใ€€่ชญใ‚ใชใ„็”จ่ชž้›†

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?