티스토리 뷰

 CNN이란?

 

    CNN은 Convolutional Neural Network의 약자로, 주로 이미지 인식 및 컴퓨터 비전 분야에서 사용되는 딥러닝 알고리즘입니다.

    CNN은 일반적인 인공신경망과는 달리 입력 데이터에 대한 공간 정보를 보존하면서 처리할 수 있는 구조로 이루어져 있습니다. 이를 위해 CNN은 이미지 등의 입력 데이터에서 특징(feature)을 추출하기 위한 컨볼루션(Convolution) 계층과 추출된 특징을 인식하는 풀링(Pooling) 계층, 그리고 인식된 특징을 기반으로 최종적인 분류를 수행하는 완전 연결 계층으로 구성됩니다.

    컨볼루션 계층에서는 입력 이미지를 필터(filter)라는 작은 크기의 윈도우를 이용하여 슬라이딩하면서 특징을 추출합니다. 이를 통해 입력 데이터의 공간 정보를 보존하면서 입력 데이터의 특징을 추출할 수 있습니다.

    추출된 특징은 풀링 계층을 통해 다운샘플링됩니다. 이 과정에서는 추출된 특징 맵(feature map)을 작은 영역으로 나누어 각 영역에서 최대값이나 평균값을 추출하여 다운샘플링합니다. 이를 통해 입력 데이터의 크기를 줄이고, 계산 비용을 낮추어줍니다.

    최종적으로 완전 연결 계층에서는 추출된 특징을 기반으로 입력 데이터를 분류하는 작업을 수행합니다. 이를 위해 일반적인 인공신경망과 동일하게 fully-connected layer를 사용합니다.

이러한 CNN은 이미지 인식 및 컴퓨터 비전 분야뿐 아니라, 자연어 처리 등의 분야에서도 활용되고 있습니다.

 

 

 

CNN의 구조

 

    CNN은 여러 개의 계층으로 이루어진 딥러닝 모델입니다. 일반적으로 CNN은 다음과 같은 계층으로 구성됩니다.

  1. 입력 계층 (Input layer): 이미지 등의 입력 데이터를 받아들입니다.
  2. 컨볼루션 계층 (Convolutional layer): 입력 이미지에 대해 필터(filter)라는 작은 크기의 윈도우를 이용하여 슬라이딩하면서 특징을 추출합니다. 이를 통해 입력 데이터의 공간 정보를 보존하면서 입력 데이터의 특징을 추출할 수 있습니다. 각 필터마다 학습되는 가중치(weight)와 bias가 있습니다.
  3. 활성화 계층 (Activation layer): 컨볼루션 계층의 결과에 비선형성을 부여하기 위해 사용됩니다. 일반적으로 ReLU(Rectified Linear Unit) 함수가 사용됩니다.
  4. 풀링 계층 (Pooling layer): 추출된 특징 맵(feature map)을 작은 영역으로 나누어 각 영역에서 최대값이나 평균값을 추출하여 다운샘플링합니다. 이를 통해 입력 데이터의 크기를 줄이고, 계산 비용을 낮추어줍니다.
  5. 완전 연결 계층 (Fully-connected layer): 추출된 특징을 기반으로 입력 데이터를 분류하는 작업을 수행합니다. 이를 위해 일반적인 인공신경망과 동일하게 fully-connected layer를 사용합니다.
  6. 출력 계층 (Output layer): 최종적인 분류 결과를 출력합니다.

    CNN에서는 보통 여러 개의 컨볼루션 계층과 풀링 계층을 쌓아서 사용합니다. 이러한 층(layer)들은 모두 서로 다른 크기와 필터 수, 필터 크기 등의 하이퍼파라미터(hyperparameter)를 가지고 있습니다. 이 하이퍼파라미터를 적절하게 조정하면 모델의 성능을 향상시킬 수 있습니다.

 

 

 

 컨볼루션 계층이란?

 

    컨볼루션 계층(Convolutional layer)은 CNN에서 가장 중요한 계층 중 하나로, 입력 데이터의 특성(feature)을 추출하는 역할을 합니다. 이미지나 비디오 등의 시각적 데이터를 처리할 때 많이 사용됩니다.

    컨볼루션 계층은 일정한 크기의 필터(filter)를 입력 데이터에 적용하여 새로운 특성 맵(feature map)을 만들어냅니다. 필터는 가중치(weight)로 구성되어 있으며, 학습 과정에서 역전파(Backpropagation) 알고리즘을 사용하여 최적의 가중치 값을 찾아내게 됩니다.

    예를 들어, 3x3 크기의 필터를 1칸 간격으로 이동시켜가며 입력 데이터에 적용하면 새로운 특성 맵이 만들어지게 됩니다. 이때 필터를 적용하는 영역을 윈도우(window) 또는 커널(kernel)이라고 부릅니다. 필터의 크기나 간격 등은 하이퍼파라미터(Hyperparameter)로 설정하며, 이 값에 따라 추출되는 특성의 크기나 특징이 달라질 수 있습니다.

    컨볼루션 계층은 여러 개를 중첩하여 사용할 수 있으며, 각 계층에서는 필터의 수나 크기 등을 다르게 설정할 수 있습니다. 이렇게 여러 개의 계층을 사용하면 점점 더 추상적인 특징을 추출할 수 있게 되며, 이를 통해 더 복잡한 패턴이나 객체를 인식할 수 있게 됩니다.

 

 

 

 코드 살펴보기

1) 필요한 라이브러리 임포트

import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Dense, Flatten

 

2) 데이터셋 불러오기

(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()

 

3) 데이터 전처리

# 입력 이미지 크기 정의
img_rows, img_cols = 28, 28

# 채널 수 (흑백 이미지이므로 1로 설정)
num_channels = 1

# 입력 이미지 크기 조정 및 정규화
x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, num_channels)
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, num_channels)
input_shape = (img_rows, img_cols, num_channels)
x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 255

# 클래스 라벨을 이진 벡터로 변환
y_train = tf.keras.utils.to_categorical(y_train, 10)
y_test = tf.keras.utils.to_categorical(y_test, 10)

 

4) 모델의 구성 정의

 두 개의 컨볼루션 계층과 두 개의 완전 연결계층 사용의 예시.

model = Sequential()

# 첫 번째 컨볼루션 계층
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(2, 2)))

# 두 번째 컨볼루션 계층
model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

# 완전 연결 계층
model.add(Flatten())
model.add(Dense(128, activation='relu'))

# 출력 계층
model.add(Dense(10, activation='softmax'))

# 모델 컴파일
model.compile(loss=tf.keras.losses.categorical_crossentropy,
              optimizer=tf.keras.optimizers.Adam(),
              metrics=['accuracy'])

 

5) 모델학습 및 평가

# 모델 학습
model.fit(x_train, y_train, epochs=10, batch_size=128, verbose=1, validation_data=(x_test, y_test))

# 모델 평가
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

 

 

 

'TIL & WIL > Deep Learning' 카테고리의 다른 글

✨ 딥러닝 : 인공신경망 및 과정  (0) 2023.04.11
TensorFlow - Regression 실습 (1) 선형회귀  (0) 2023.04.11
TensorFlow - Classification 실습  (0) 2023.04.11
TensorFlow - beginner 실습  (0) 2023.04.11
✨ 딥러닝 기초  (1) 2023.04.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함