티스토리 뷰
주로 이미지 분류 작업에 활용되는 CNN(Convolutional Neural Network)의 모델을 정의하는 파이썬 코드에 대해 알아보고자 한다.
[예시 코드]
model = models.Sequential([
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.Flatten(),
layers.Dense(64, activation='relu'),
layers.Dense(10, activation='softmax')
])
[모델 구조의 주요 구성 요소]
- models.Sequential:
- Sequential API를 사용하여 층(layer)을 순차적으로 쌓는 구조.
- 각 층은 순서대로 입력 데이터를 처리하며, 이전 층의 출력을 다음 층의 입력으로 사용.
- layers.Conv2D:
- 2D 컨볼루션 층으로, 입력 데이터에 커널(필터)을 적용하여 특징 맵(feature map)을 생성.
- 이미지의 패턴(엣지, 텍스처 등)을 추출.
- 주요 파라미터:
- filters: 필터의 수 (출력 채널 수).
- kernel_size: 필터 크기. 여기서는 3×33 \times 3 크기의 필터 사용.
- activation: 활성화 함수로, ReLU(Rectified Linear Unit)를 사용해 비선형성을 부여.
- input_shape: 입력 데이터의 크기. CIFAR-10 이미지는 32×32×332 \times 32 \times 3 (너비, 높이, 채널 수).
- layers.MaxPooling2D:
- 최대 풀링 층으로, 특징 맵의 크기를 줄이고 계산량을 감소시키며, 중요한 특징을 강조.
- 주요 파라미터:
- pool_size: 풀링 영역 크기. 여기서는 2×22 \times 2 사용.
- 특징 맵의 크기가 1/21/2로 줄어듦.
- layers.Flatten:
- 다차원 데이터를 1차원 벡터로 변환.
- 컨볼루션 층과 Fully Connected 층 사이의 연결을 위해 필요.
- layers.Dense:
- 완전 연결(fully connected) 층으로, Flatten된 데이터를 입력받아 특정 크기의 출력을 생성.
- 주요 파라미터:
- units: 출력 뉴런의 수.
- activation: 활성화 함수.
- ReLU: 은닉층에서 사용.
- Softmax: 출력층에서 사용하여 각 클래스에 대한 확률 분포를 생성.
[계층별 동작 및 출력 크기]
* 입력 데이터는 CIFAR-10의 이미지 크기인 32(가로)x32(세로)x3(채널)로 가정함.
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3))
1. 첫 번째 Conv2D 층
- 입력 크기: 32×32×332 \times 32 \times 3
- 필터: 32개 (3×33 \times 3 크기)
- 출력 크기: 30×30×3230 \times 30 \times 32 (패딩 없이 진행)
layers.MaxPooling2D((2, 2))
2. 첫 번째 MaxPooling2D 층
- 입력 크기: 30×30×3230 \times 30 \times 32
- 풀링 크기: 2×22 \times 2
- 출력 크기: 15×15×3215 \times 15 \times 32
layers.Conv2D(64, (3, 3), activation='relu')
3. 두 번째 Conv2D 층
- 입력 크기: 15×15×3215 \times 15 \times 32
- 필터: 64개 (3×33 \times 3 크기)
- 출력 크기: 13×13×6413 \times 13 \times 64
layers.MaxPooling2D((2, 2))
4. 두 번째 MaxPooling2D 층
- 입력 크기: 13×13×6413 \times 13 \times 64
- 풀링 크기: 2×22 \times 2
- 출력 크기: 6×6×646 \times 6 \times 64
layers.Conv2D(64, (3, 3), activation='relu')
5. 세 번째 Conv2D 층
- 입력 크기: 6×6×646 \times 6 \times 64
- 필터: 64개 (3×33 \times 3 크기)
- 출력 크기: 4×4×644 \times 4 \times 64
layers.Flatten()
6. Flatten 층
- 입력 크기: 4×4×644 \times 4 \times 64
- 출력 크기: 10241024 (4 x 4 x 64 = 1024)
layers.Dense(64, activation='relu')
7. 첫 번째 Dense 층
- 입력 크기: 10241024
- 출력 크기: 6464
layers.Dense(10, activation='softmax')
8. 출력(Dense) 층
- 입력 크기: 6464
- 출력 크기: 1010 (CIFAR-10 클래스 수)
[모델의 전체 학습 과정]
- 특징 추출:
- Conv2D와 MaxPooling2D를 통해 입력 데이터에서 중요한 특징(엣지, 패턴 등)을 추출.
- 단계적으로 저수준 특징에서 고수준 특징으로 학습.
- 분류:
- Flatten 층으로 데이터를 1차원으로 변환.
- Dense 층에서 클래스별 확률 값을 계산.
[활성화 함수]
- ReLU:
- 비선형성을 부여하여 모델이 복잡한 패턴을 학습 가능.
- Softmax:
- 출력층에서 사용하며, 각 클래스에 대한 확률 분포를 반환.
반응형
'SWDesk > ArtificialIntelligence' 카테고리의 다른 글
CNN 계층 설정 사례 (0) | 2024.11.28 |
---|---|
신경망에서 이용되는 활성화 함수 종류 및 특징 (0) | 2024.11.27 |
확률적 경사 하강법(SGD) 함수 사용법 (0) | 2024.11.25 |
*합성곱 신경망(Convolutional Neural Netwrok) 기본 이론 (0) | 2024.11.23 |
인공지능 구현에 사용되는 최적화 알고리즘 - Adam, 확률적 경사 하강법 등 (2) | 2024.11.22 |
반응형
250x250
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- DYOV
- badp
- 절연형
- Innovations
- 오블완
- bilient
- 치매
- 전류
- 티스토리챌린지
- Innovation&Hurdles
- 허들
- Video
- image
- 빌리언트
- 혁신과허들
- Hurdles
- 아두이노
- 심심풀이
- 전압전류모니터링
- 둎
- 치매방지
- Innovations&Hurdles
- Decorator
- 배프
- arduino
- ServantClock
- 전압
- 혁신
- 심심풀이치매방지기
- BSC
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함