Convolution Neural Network(CNN)
이미지 처리에 특화된 딥러닝 모델이다.
MLP(Multi-Layer Perceptron)의 한계점
- MLP는 입력 데이터로 1차원 벡터만 사용 가능
- 2차원 이상의 데이터는 평탄화 과정 사용
- 데이터가 한 줄로 늘어서면 시간이 느려지고, '데이터의 형상(색감과 거리감)이 무시'된다.
CNN의 특징
- Translation Invariance한 특징을 파악 할 수 있다.
- Fully Connected layer 대비 적은 Parameter를 사용한다.
컨볼루션 연산(Convolution Operation)
필터(filter)
- 커널(kernel)이라고도 한다.
- 필터의 사이즈는 거의 홀수이다.
- 과적합을 방지한다.
- 사람이 미리 정해 놓는 것이 아니라 네트워크 학습을 통해 자동으로 추출
- 코드에서 지정해야 하는 것은 필터의 각 픽셀 값이 아니라 필터의 개수이다.
필터(filter) 연산
- 입력 데이터에 필터를 통해 필터에 대응하는 원소끼리 곱하고, 그 합을 구한다.
- 연산이 완료된 결과 데이터를 특징 맵(feature map)이라고 부른다.
패딩(Padding)과 스트라이드(Stride)
패딩(padding)
입력 데이터의 주변을 특정 값으로 채우는 기법 : 주로 0
valid
- 패딩을 주지 않음
same
- 패딩을 주어 입력 데이터의 크기와 연산 후의 이미지 크기를 같도록 유지
- 만약, 필터의 크기가 k이면, 패딩의 크기는 (k-1)/2가 된다.(단, stride=1)
스트라이드(Stride)
필터를 적용하는 간격을 의미한다.
output size
- (N+2P-F) / stride + 1
- n: 입력 데이터의 크기
- f: 필터(커널)의 크기
- p : 패딩 크기
풀링(pooling)
- 필터 사이즈 내에서 특정 값을 추출하는 과정
- 모델의 파라미터 개수를 줄여주고, 연산 속도를 빠르게 한다.
맥스 풀링
- 가장 많이 사용한다.
- 필터 안의 대표값만 추출한다.(사람의 눈도 특징적인 면만 캐치한다.)
애버리지 풀링
- 필터 안의 평군 값을 추출한다.
- 물체의 전체적인 특징보다 평균과 분산 개념으로 위치 파악에 요긴하여 object detection 분야에 많이 쓰인다.
Fashion Mnist
데이터 불러오기
데이터 전처리 및 이미지 불러오기
모델링
Filter 개수 설정
64개의 filter를 쓴다는건 96개의 서로다른 filter로 64개의 features를 뽑아내겠다는 의미이다.
filter 종류의 예시
만약 6개의 feature를 사용하면 6개의 결과값이 산출된다.
poolling layer
Convolution 연산이 된 결과값들을 Maxpooling 하자.
이 산출된 값을 fully-connected layer를 사용하여 하나하나 연결하여 분류하여 보자.
Dense 층 추가하기
합성곱 층에 이어 뒷부분는 분류를 담당하는 Dense 층(Fully-connected layer) 세 개를 추가한다.
Fully-connected layer는 완전히 연결된 계층이라는 뜻으로
한층의 모든 뉴런이 다음층이 모든 뉴련과 연결된 상태로
2차원의 배열 형태 이미지를 1차원의 평탄화 작업을 통해 이미지를 분류하는데 사용되는 계층입니다.
Fully-Connected layer의 과정
1. 2차원 배열 형태의 이미지를 1차원 배열로 평탄화
2. 활성화 함수(Relu, Leaky Relu, Tanh등)로 가중치를 주어 뉴런을 활성화
3. 분류기(Softmax) 함수로 분류
Fully-Connected layer 중간에 Dropout 레이어를 추가한다.
마지막 결과값을 확률 기반의 softmax 함수를 통해 결과값을 분류한다.
모델 학습
모델 시각화
최종 학습된 모델을 테스트셋으로 검증한 결과 85.9%의 정확도를 보였다.
이미지 보강(Augmentation)
훈련 데이터에 없는 이미지를 새롭게 만들어서 훈련데이터 보강하기
※ ImageDataGenerator 하이퍼파라미터
- rotation_range = 이미지 각도, zoom_range = 줌 비율 설정,
- shear_range = 이미지를 어느정도로 찌그러 트릴지
- width_shift_range = 사진 좌우 이동 비율, height_shift_range = 이미지 상하 이동 비율
- horizontal_flip = 좌우반전 설정, vertical_flip = 상하반전 설정 (True or False)
x_augmented = image_generator.flow(np.tile(train_X[0].reshape(28*28),100).reshape(-1,28,28,1), np.zeros(augment_size), batch_size=augment_size, shuffle=False).next()[0]
TensorBoard
- 시각화에 도움이 된다.
- 콜백 함수를 설정하여 Tensorboard를 불러올 수 있다.
history = model.fit(train_X, train_Y, epochs=25, validation_split=0.25, callbacks=[early_stopping_callback, tensorboard_callback])
Tensorboard 불러오기
'플레이데이터 빅데이터 부트캠프 12기 > 머신러닝 & 딥러닝' 카테고리의 다른 글
[플레이데이터 빅데이터 부트캠프]머신러닝 & 딥러닝 Teachable Machine (0) | 2022.08.10 |
---|---|
[플레이데이터 빅데이터 부트캠프]머신러닝 & 딥러닝 전이 학습 (0) | 2022.08.10 |
[플레이데이터 빅데이터 부트캠프]머신러닝 & 딥러닝 Deep Learning 개요(2) (0) | 2022.08.09 |
[플레이데이터 빅데이터 부트캠프]머신러닝 & 딥러닝Tensorflow(2) (0) | 2022.08.09 |
[플레이데이터 빅데이터 부트캠프]머신러닝 & 딥러닝 Deep Learning Tensorflow (0) | 2022.08.08 |