CNN(Convolution Neural Network)이란?
비정형 데이터를 다루는 방법 중의 하나로, 이미지 학습에 뛰어난 딥러닝 모델입니다.
데이터의 특징을 추출하여 특징들의 패턴을 파악하고 예측값과 정답을 비교, weight, bias 값을 업데이트해서 학습을 반복하는 과정을 거칩니다.
이번 시간에도 mnist 데이터를 활용해 분석을 진행해 보았습니다 :) ~
import pandas as pd
df = pd.read_csv('mnist_train.csv')
1. 라이브러리 설치
import numpy as np
import tensorflow as tf #tensorflow 기본
from tensorflow.keras.models import Sequential #모델 box 정의
from tensorflow.keras.layers import Flatten, Dense #모델 Box의 Input Layer, Output Layer
from tensorflow.keras.optimizers import SGD #알고리즘 담당
from sklearn.model_selection import train_test_split #train, test 데이터 분리
from sklearn.preprocessing import MinMaxScaler #데이터 정규화 - 큰 숫자를 작은 숫자로 변경 (-1 ~ 1)
2. X 데이터, Y 데이터 분리
X_data = df.drop(['label'], axis = 1, inplace = False)
Y_data = df['label']
3. 정규화 (Normalize)
: 픽셀 데이터를 정규화하여 0-1 사이의 실수로 변환합니다.
scaler = MinMaxScaler() #scaler 객체를 생성
scaler.fit(X_data) #scaler 객체를 학습
4. Conversion
norm_x_data = scaler.transform(X_data) #scaler를 통해 실제 값 변환
5. Train 데이터와 Test 데이터 분리
norm_train_x_data, norm_test_x_data, train_y_data, test_y_data = train_test_split(
norm_x_data, Y_data, test_size = 0.3) #7대 3으로 분리
6. Convolution, MaxPooling 모델 설정
- Conv2D: 2차원 합성곱층
- MaxPooling2D: 2차원 풀링층
from tensorflow.keras.layers import Conv2D, MaxPooling2D
model = Sequential()
model.add(Conv2D(filters = 32,
kernel_size =(3,3),
strides=(1,1),
activation = 'relu',
input_shape=(28,28,1)))
model.add(Conv2D(filters = 64,
kernel_size =(3,3),
strides=(1,1),
activation = 'relu'))
model.add(MaxPooling2D(pool_size = (2,2)))
model.add(Conv2D(filters = 64,
kernel_size =(3,3),
strides=(1,1),
activation = 'relu'))
5. Classification
: flatten 함수를 통해 전체 4차원에서 2차원으로 바꾸어줍니다.
model.add(Flatten())
6. Hidden Layer 설정
model.add(Dense(units = 256, activation = 'relu'))
7. Output Layer 설정
: 다중분류 - output 출력되는 양 만큼
model.add(Dense(units = 10, activation = 'softmax'))
8. 컴파일
: 모델이 어떻게 동작할지 지정하는 과정입니다.
(optimizer = 최적화, loss = 손실함수, metrics = 평가방법)
model.compile(optimizer = SGD(learning_rate = 0.0001),
loss = 'sparse_categorical_crossentropy',
metrics = ['accuracy'])
9. 모델 학습
norm_train_x_data = norm_train_x_data.reshape(-1, 28, 28, 1)
model.fit(norm_train_x_data, train_y_data, epochs = 50,
verbose = 1,
validation_split = 0.2)
#validation_split: 자체 가지고 있는 데이터로 활용
'Python > 머신러닝, 딥러닝' 카테고리의 다른 글
[딥러닝] CNN 이미지 학습 모델 개념 정리 (0) | 2022.05.23 |
---|---|
[Tensorflow] Keras를 통한 딥러닝 (ANN - 인공신경망) (0) | 2022.05.13 |
KoNLPy 설치 및 한국어 형태소 라이브러리 비교 (0) | 2022.04.29 |
scikit-learn(사이킷 런) 활용하여 정답률 확인하기 (0) | 2022.04.28 |
TensorFlow(텐서플로우) 설치하기 (0) | 2022.04.27 |