인공지능/딥러닝
CNN(Convolutional Neural Network)-MNIST _Categorical Classification
2^7
2022. 6. 24. 14:34
CNN(Convolutional Neural Network)
합성곱(Convolutional) 신경망 알고리즘
- 이미지 처리 작업에 주로 사용
- 합성곱 연산을 이용하여 가중치(Weight)의 수를 줄이고 연산량을 감소
- 여러 개의 Filter(Parameter Matrix)로 이미지의 특징(Feature Map)을 추출
- Local connectivity & Parameter Sharing
- 말단에 Sigmoid 또는 Softmax 함수를 적용하여 이미지 분류작업 수행
- LeNet, AlexNet, VGGNet, InceptionNet, ResNet 등으로 발전
Hyperparameter
- Filter
- Filter를 Input_Data에 적용하여 특징 맵(Feature Map) 생성
- Filer의 값은 Input_Data의 특징(Feature)을 학습하는 가중치(Weight) 행렬
- 동일한 Filter로 Input_Data 전체에 합성곱 연산(Convolutional) 적용
- 동일한 Filter로 Input_Data 전체에 합성곱 연산(Convolutional) 적용
- Stride
- Filter를 적용하기 위해 이동하는 위치의 간격
- Stride값이 커지면 출력 특징 맵(Feature Map)의 크기가 감소
- Pooling
- 가로 및 세로 방향으로 크기를 줄이는 연산
- Pooling Window 및 Stride 값 지정
- Padding
- Padding은 출력 크기를 조정할 목적으로 사용
- 합성곱 연산을 수행하기 전에 Input_Data 주변을 0으로 채우는 것
Channel
- n차원 데이터 : n차원 Filter를 사용하여 합성곱 연산 수행
- Input_Data의 채널 수와 Filter의 채널 수는 같아야 함
Classification
- CNN의 마지막 단계에 분류를 위한 필터를 적용(Sigmoid OR Softmax)
MNIST - Categorical Classification
1. MNIST Data_Set Load
import tensorflow
from tensorflow.keras.datasets import mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()
2. Data Preprocessing
2-1. Reshape and Normalization
X_train = X_train.reshape((60000, 28, 28, 1))
X_test = X_test.reshape((10000, 28, 28, 1))
X_train = X_train.astype(float) / 255
X_test = X_test.astype(float) / 255
2-2. One Hot Encoding
from tensorflow.keras.utils import to_categorical
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
3. MNIST Keras Modeling
3-1. Model Define
#Feature Extraction Layer
from tensorflow.keras import models
from tensorflow.keras import layers
model = models.Sequential()
model.add(layers.Conv2D(filters=32, kernel_size=(3,3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPool2D(pool_size=(2,2)))
model.add(layers.Conv2D(filters=64, kernel_size=(3,3), activation='relu'))
model.add(layers.MaxPool2D(pool_size=(2,2)))
model.add(layers.Conv2D(filters=64, kernel_size=(3,3), activation='relu'))
model.summary()
model.add(layers.Flatten())
model.add(layers.Dense(units=64, activation='relu'))
model.add(layers.Dense(units=10, activation='softmax'))
model.summary()
3-2. Model Compile
model.compile(loss = 'categorical_crossentropy',
optimizer = 'rmsprop',
metrics = ['accuracy'])
3-3. Model Fit
%%time
Hist_mnist = model.fit(X_train, y_train,
epochs = 100,
batch_size = 128,
validation_split = 0.2)
3-4.학습 결과 시각화
import matplotlib.pyplot as plt
epochs = range(1, len(Hist_mnist.history['loss']) + 1)
plt.figure(figsize = (9, 6))
plt.plot(epochs, Hist_mnist.history['loss'])
plt.plot(epochs, Hist_mnist.history['val_loss'])
# plt.ylim(0, 0.4)
plt.title('Training & Validation Loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend(['Training Loss', 'Validation Loss'])
plt.grid()
plt.show()
3-5. Model Evaluate
loss, accuracy = model.evaluate(X_test, y_test)
print('Loss = {:.5f}'.format(loss))
print('Accuracy = {:.5f}'.format(accuracy))
728x90