KT AIVLE(KT 에이블스쿨) 5기 DX트랙_ 딥러닝 기초_CNN
[ 딥러닝 구조 - CNN ]
1. input_shape : 분석 단위인 이미지 한 장의 크기 (픽셀 사이즈, 가로 * 세로 * 채널)
- 흑백 : 채널 = 1
- 컬러 : 채널 = 3
2. Convolutional Layer: 필터로 지역적인 특성(feature)을 뽑는 과정
3. Max pooling Layer: 뽑은 특징을 요약(압축)
4. 펼쳐서(Flatten), Dense Layer에 연결
=> 4차원 data셋 요구 (input_shape = (,,) 3차원)
[ CNN 코드 ]
1) ConvNet
Conv2D(32, kernel_size = (3,3), input_shape(5, 5, 1), padding = 'same'. strides = (1,1), activation = 'relu'),
특히 Conv2D: 이미지 분석에 주로 사용
- 데이터에 담겨 있는 지역적 특징을 추출
- 필터(커널): 개수 32개
- 2차원으로 이동하며 Feature Map 구성
- kernel_size = (3,3) 가로 3, 세로 3, 가로세로 길이가 같으면 kernel_size = 3
Stride: 몇 칸 씩 이동할 것인지 지정
- strides = (1,1) 가로, 세로 이동 칸 수
Padding
- size 유지되도록 이미지 둘레에 0으로 덧대기
2) MaxPooling
MaxPooling2D(pool_size=(2,2), strides = (2,2)),
- 출력데이터의 크기를 줄이거나 특정 데이터를 강조하기 위해 사용
- pooling_size: 풀링 크기 행 x duf
- strides: 생략하면 pool_size와 동일
3) Flatten과 Dense Layer
Flatten(),
Dense(128, activation='relu'),
Dense(10, activation='softmax')
CNN + MaxPooling Layer로 특징을 추출한 후에, 최종 예측 결과로 뽑기 위해서는 (1차원 혹은 단일 값)
Dense Layer로 연결
1+2+3) CNN 전체코드
model2 = Sequential([Conv2D(16, kernel_size = 3, input_shape=(28, 28, 1),
padding='same', activation='relu'), # strides = 1(기본값,1)
MaxPooling2D(pool_size = 2 ), # strides = 2(기본값이 pool_size 동일)
Flatten(),
Dense(128, activation='relu'),
Dense(10, activation='softmax') # 다중분류
])
model2.summary()
요약
CNN 학습
- 지역적인 특징을 추출하는 필터 만들기 (Conv2d)
- 필터로 뽑아낸 특징을 요약(MaxPooling)
- 최종 특징 값들을 펼쳐서 (Flatten), Dense Layer에 연결하기
성능관리
1) 데이터
- 입력 데이터 정제, 적절한 전처리
- 데이터 늘리기: 열(적절한 feature 추가), 행(데이터 건수 늘리기)
2) 모델 구조
- 은닉층, 노드 수 늘리기: 성능이 증가할 때 까지
- activation
3) 학습
epochs, learning_rate, optimizer
4) 과적합 문제
- 모델링 목적: 모집단 전체에서 두루 잘 맞추는 적당한 모델 만들기
- 과적합: 학습 데이터에서만 높은 성능, 다른 데이터에서는 낮은 성능
5) 과적합 문제 해결
- 데이터 건수 늘리기
- 모델 복잡도 조절하기 -> 가중치 규제
- 반복 학습 횟수(epochs) 적당히 -> early stopping
6) 모델 저장하기
- 최종 모델 저장
- 체크포인트에서 모델 저장