신경망과 CNN

남가연·2023년 7월 21일
0

AI

목록 보기
10/11

신경망이란?

신경망 : 인공신경망은 기계학습과 인지과학에서 생물학의 신경망에서 영감을 얻은 알고리즘

CNN?

CNN(Convolutional neural network) : 데이터로부터 직접 학습하는 딥러닝의 신경망 아키텍처

그림을 보면 Convolution Layer와 Pooling layer를 여러겹 쌓는 형태로 구성되어있

용어들

  • True Color : 사람이 볼 수 있는 색이라서 True Color. 컬러 모니터에 표시되는 색상의 규격으로, 하이컬러가 16비트값을 사용하는데 비하여 32비트값을 사용.

  • Gray Scale : 하양에서 검정 사이의 회색의 점진적인 단계 범위로 명도 차의 척도.

  • Convolution Layer : 수많은 filter들을 통해 feature을 뽑아내는 레이어
    • 작동 원리 : 사진처럼 filter(보라색) 과 Kernel Matrix를 곱한 뒤, 그들을 더해 하나의 값을 뽑아내는데, 이때 filter의 크기, 보폭 등을 결정하게 됨. 그 후 filter을 보폭에 따라 움직이면서 값을 output matrix에 넣게 됨.

  • Pooling Layer : 데이터를 압축시키는 레이어. 압축시키는 이유는 정확성을 높이기 위해 filter의 양을 늘릴 것인데, 이로 인한 문제들을 해결하기 위해 pooling layer를 이용해서 차원을 줄여 문제를 방지하는 것.
    • 작동 원리
      • Max pooling : 작게 쪼갠 것들 중에서 가장 큰 값을 대표값으로 가지는 것
      • Average Pooling : 것들의 평균값들을 대표값으로 가지는 것

  • Flatten Layer : Convolution Layer와 Pooling Layer를 반복적으로 거치면서 주요 특징이 추출되는데, 이 특징은 2차원으로 형성이 된다. 이 2차원 데이터를 1차원 데이터로 변경해주는 레이어.

예제 ) CNN

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
from tensorflow.keras.callbacks import ModelCheckpoint,EarlyStopping
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical

import matplotlib.pyplot as plt
import numpy as np

(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(X_train.shape[0], 28, 28, 1).astype('float32') / 255
X_test = X_test.reshape(X_test.shape[0], 28, 28, 1).astype('float32') / 255
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), input_shape=(28, 28, 1), activation='relu'))
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(10, activation='softmax'))
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])

modelpath="./MNIST_CNN.hdf5"
checkpointer = ModelCheckpoint(filepath=modelpath, monitor='val_loss', verbose=1, save_best_only=True)
early_stopping_callback = EarlyStopping(monitor='val_loss', patience=10)

history = model.fit(X_train, y_train, validation_split=0.25, epochs=30, batch_size=200, verbose=0, callbacks=[early_stopping_callback,checkpointer])
print("\n Test Accuracy: %.4f" % (model.evaluate(X_test, y_test)[1]))

결과 :

데이터들을 보면 손실이 감소하면 데이터를 따로 저장하는 것을 볼 수 있는데, 만약 손실률이 감소하지 않았다면 데이터를 저장하지 않고 계속 학습을 돌리는 것을 볼 수 있다.

profile
-ㅅ-)b

0개의 댓글

관련 채용 정보