[ML Study]ch08-2 합성곱 신경망을 사용한 이미지 분류
혼자 공부하는 머신러닝+딥러닝 [8-2]
본 포스팅 한빛미디어의 <혼자공부하는 머신러닝+딥러닝(박해선 저)>를 요약 정리했습니다.
합성곱 신경망을 사용한 이미지 분류
패션 MNIST 데이터 불러오기
Conv2D
-
입력의 너비와 높이 방향의 합성곱 연산을 구현한 클래스이다.
-
첫번쨰 매개변수는 합성곱 필터의 개수이다.
-
kernel_size 매개변수
-
필터의 커널 크기를 지정한다. 가로세로 크키가 같은 경우 정수 하나로, 다른 경우 정수의 튜플로 지정할 수 있다.
-
일반적으로 커널의 가로세로 크기는 동일하다.
-
커널의 깊이는 입력의 깊이와 동일하기 떄문에 따로 지정하지 않는다.
-
-
strides 매개변수
-
필터의 이동 간격을 지정한다.
-
가로세로 크기가 같은 경우 정수 하나로, 다른 경우 정수의 튜플로 지정할 수 있다.
-
일반적으로 가로세로 스트라이드 크기는 동일하다.
-
기본값은 1이다.
-
-
padding 매개변수
-
입력의 패딩 타입을 지정한다.
-
기본값 ‘valid’는 패딩을 하지 않는다.
-
‘same’은 합성곱 층의 출력의 가로세로 크기를 입력과 동일하게 맞추도록 입력에 패딩을 추가한다.
-
-
activation 매개변수는 합성곱 층에 적용할 활성화 함수를 지정한다.
MaxPooling2D
-
먼저 Pooling은 convolution으로 뽑아낸 값을 전부 가져가는 것이 아니라, 대표적인 특징만 남기는 작업이다.
-
많이 사용하는 것은 MaxPooling으로 지정한 kernel만큼 훑으면서 가장 큰 값만 남기는 것이다.
-
첫 번째 매개변수는 풀링의 크기를 지정하며, 가로세로 크키가 같은 경우 정수 하나로, 다른 경우 정수의 튜플로 지정할 수 있다.
-
일반적으로 커널의 가로세로 크기는 동일하다.
-
strides 매개변수
-
풀링의 이동 간격을 지정한다.
-
기본값은 풀링의 크기와 동일하다. 즉 입력 위를 겹쳐서 풀링하지 않는다.
-
-
padding 매개변수
-
입력의 패딩 타입을 지정한다.
-
기본값 ‘vaild’는 패딩을 하지 않는다.
-
‘same’은 합성곱 층의 출력의 가로세로 크기를 입력과 동일하게 맞추도록 입력에 패딩을 추가한다.
-
plot_model
-
케라스 모델 구조를 주피터 노트북에 그리거나 파일로 저장한다.
-
모델 구조를 시각화하는 함수이다.
-
모델의 계층 구성 및 데이터 흐름을 이해하기 쉬운 그래프로 표현할 수 있다.
-
첫 번째 매개변수에 케라스 모델 객체를 전달한다.
-
to_file 매개변수
- 파일 이름을 지정하면 그림을 파일로 저장한다.
-
show_shapes 매개변수
- True로 지정하면 층의 입력, 출력 크기를 표시한다. 기본값은 False이다.
-
show_layer_names 매개변수
- True로 지정하면 층 이름을 출력한다. 기본값은 True이다.
입력 이미지는 항상 깊이(채널) 차원이 있어야 한다.
만약 입력 이미지가 흑백 이미지와 같은 채널 차원이 없는 2차원 배열일 경우 Conv2D 층을 사용하기 위해 마지막에 채널 차원을 추가해야 한다.
넘파이 reshape() 메서드를 사용해 전체 배열 차원을 그대로 유지하면서 마지막에 차원을 간단히 추가할 수 있다.
아래의 그림과 같이 차원이 추가 되는 것을 확인할 수 있다.

합성곱 신경망 만들기
합성곱 신경망을 만들 떄 1. 합성곱 층 추가하기, 2. 풀링 층 추가하기, 3. Flatten, 은닉층, Drop, 출력층 구성하기로 나눌 수 있다.
-
합성공 층 추가하기
-
첫 번째 합성곱 층인 Conv2D를 추가한다. 만약 흑백 임지와 같은 채널 차원이 없는 2차원 배열일 경우 마지막에 채널 차원을 추가한다.
-
필요한 매개변수는 커널의 개수, 커널의 이미지, 커널의 사이즈, 활성화 함수, 패딩, 입력 데이터 크기가 있다.
-
패딩은 세임패딩을 전용한다.
-
패딩은 입력 배열 주위를 가상의 원소로 채우는 것을 말한다.
-
세임패딩은 합성곱 층의 출력 크기를 입력과 동일하게 만들기 위해 입력에 패딩을 추가하는 것이다.
-
-
폴링 층 추가하기
-
케라스는 최대 풀링과 평균 풀링을 MaxPooling2D와 AveragePooling2D를 제공한다. 그 중에서 하나를 선택하여 풀링을 사용한다.
-
풀링을 통과한 후 두 번째 합성곱 풀링 층을 추가한다.
-
-
Flatten, 은닉층, Drop, 출력층 구성하기
-
출력층에서 확률을 계산하기 위해 3창원 특성 맵을 펼친다.
-
Flatten 층을 만들고, Dense은닉층, Dropout, Dense 출력층 순서대로 층을 구성한다.
-
은닉층과 출력층 사이에 Dropout을 넣어 은닉층의 과대적합을 막아 성능을 개선할 수 있다.
-
모델 구조 확인하기
-
summary() 메서드로 모델 구조를 확인할 수 있다.
-
keras.utils 패키지의 plot_model() 으로 층의 구성을 그림으로 확인할 수 있다.