LeNet-5는 합성곱 신경망이라는 개념을 최초로 개발한 얀 크룬이 개발한 CNN 구조이다.
ABSTRACT
LeNet-5는 수표에 쓴 손글씨를 인식하는 딥러닝 구조로 발표되었다. LeNet에는 여러 버전이 있는데, 그중에 최종 버전인 LeNet-5이다. 모델 구조는 합성곱층과 다운 샘플링층(풀링)을 반복적으로 지나고 마지막엔 완전 연결층을 연결하여 연산을 수행한다. 이 모델이 현재 CNN의 초석이 되었다.
LeNet-5 Architecture
LeNet-5 구조를 차례로 살펴보자. (C: convolution layer, S: pooling layer, F: fully-connected layer)
- C1: 5x5 합성곱 연산을 통해 28x28 크기의 feature maps 6개를 생성한다.
- S2: 6개의 feature maps을 14x14 크기로 다운 샘플링한다.
- C3: 5x5 합성곱 연산을 통해 10x10 크기의 feature maps 16개를 생성한다.
- S4: 16개의 feature maps을 5x5 크기로 다운 샘플링한다.
- C5: 5x5 합성곱 연산을 통해 1x1 크기의 feature maps 120개를 생성한다.
- F6: 완전연결층으로 84개의 노드와 연결한다.
LeNet-5 Example
앞서서 LeNet-5 모델의 구조를 공부했으니 이제 파이썬을 이용하여 직접 클래스를 구현해보자
Create LesNet-5 Class
## setup
import tensorflow as tf
from keras.api._v2.keras import Sequential
from keras.api._v2.keras import activations
from keras.optimizers import Optimizer
from tensorflow.keras import Model
from tensorflow.keras.models import Sequential
from tensorflow.keras.losses import categorical_crossentropy
from tensorflow.keras.layers import Dense, Flatten, Conv2D, AveragePooling2D
## LeNet-5 class
class LeNet(Sequential):
def __init__(self, input_shape, nb_classes):
super().__init__()
self.add(Conv2D(6,kernel_size=(5,5), strides=(1,1), activations='relu',
input_shape=input_shape, padding='same')) # C1
self.add(AveragePooling2D(pool_size=(2,2), strides=(2,2), padding='valid')) # S2
self.add(Conv2D(16,kernel_size=(5,5), strides=(1,1), activations='relu',
padding='valid')) # C3
self.add(AveragePooling2D(pool_size=(2,2), stride=(2,2), padding='valid')) # S4
self.add(Flatten())
self.add(Dense(120, activations='relu')) # C5
self.add(Dense(84, activations='relu')) # F6
self.add(Dense(nb_classes, activations='softmax')) # Output
self.compile(optimizer='adam', loss=categorical_crossentropy, metrics=['accuracy'])
- strides : 필터를 적용하여 연산을 하는 간격
- activation : 활성화 함수 선택 ( LeNet-5에선 'relu' 사용 )
- padding : 연산 전에 이미지 주변에 빈 값을 넣어 이미지 크기를 유지 ( 'same' : 이미지를 연산 전과 후를 같게 함, 'valid' : 비활성화를 의미함
아직 CNN 용어들이 익숙하지 않다면 앞 포스트를 참고해주시기 바랍니다.
https://jaesuk-1207.tistory.com/51
합성곱 신경망 (Convolutional Neural Network, CNN) 개념 및 구조
합성곱 신경망은 이미지나 영상을 처리할 때 많이 사용되는 신경망입니다. 합성곱 신경망을 사용할 때 이미지를 한 번에 계산하는 것이 아닌 국소적인 부분을 계산함으로써 시간과 자원을 줄이
jaesuk-1207.tistory.com
'프로그래밍 > 머신러닝 & 딥러닝' 카테고리의 다른 글
전이 학습 (Transfer Learning) (0) | 2022.10.21 |
---|---|
합성곱 신경망 (Convolutional Neural Network, CNN) 개념 및 구조 (0) | 2022.10.21 |
tensorflow를 이용한 기초 딥러닝 (0) | 2022.07.06 |
비지도 학습 핵심 알고리즘 (0) | 2021.09.02 |
지도 학습 핵심 알고리즘 (0) | 2021.08.26 |