한 달 만에 올린다. 일정관리를 안 하니 한없이 늘어지는 Magic..
이번 장에서는 이미지 분류 문제에 적용할 수 있는 CNN(Convolution Neural Network)에 대해 학습했다. 과정에서 패션 MNIST 데이터 세트를 샘플로 다루었다.
합성곱 신경망의 구성 요소
합성곱
- 이미지에서.. 유용한 특성만 드러나게 하는 것?
- 밀집층에는 입력 개수만큼의 가중치가 있음(모든 입력에 가중치를 곱함)
- 합성곱은 대신 일부에 가중치를 곱함
- 전체 입력 데이터에..합성곱의 가중치 만큼 씩만 곱하면서 전체 입력 데이터를 계산.
- 가중치는 그대로 사용.
- Window 같은거.
- 10개 입력 x 3개 가중치 = 8개 출력(0~2, 1~3, 2~4, 3~5, …)
- 가중치 개수는 Hyperparam
- CNN에서는 뉴런을 필터(filter) 또는 커널(kernel) 이라고 부름, 출력은 특성 맵(feature map)이라고..
- 2차원에도 적용할 수 있다. 필터를 2차원으로 만들면 되니까
- 각각의 특징을 잡아내는 여러 개의 필터를 사용.
- 입력보다 훨씬 작은 크기(보통 3×3, 5×5)의 커널을 사용, 왼→오, 위→아래 방향으로 이동
- 그래서 이미지 처리에 뛰어난 성능..
- 합성곱 신경망 = 1개 이상의 합성곱 층을 쓴 인공신경망
- 모두 합성곱 층만 쓰는건 아님. 출력층 앞에 밀집층 두는 게 일반적(클래스 확률 계산)
- 패딩
- 구석 애들은 계산에서 소외되네? 빈 칸으로 둘러쌓주자.
- 입력 크기와 특성 맵 크기가 같아 지도록 하는 경우가 많다..
- 스트라이드
- 몇 칸씩 이동?
- 대부분 그냥 1로
- 풀링(pooling)
- 특성 맵의 가로세로 크기를 줄이는 역할
- 가중치 없는 커널
- 큰 값(max pooling) 또는 평균 값(average pooling)
- 합성곱과 다르게 겹치지 않고 이동
- keras.layers.MaxPool2D
- 전체 구조
-
- 합성곱 필터
- 필터의 갯수는.. → 클래스의 종류(다른 의미는 없나?)
-
- 컬러 이미지 → 3차원 → 필터도 3차원. 케라스도 기본 3차원을 기대.
- 풀링 층 다음에 다시 합성곱을 배치하기도 함.
- 그래서..합성곱 신경망은 너비와 높이가 점점 줄어들고 깊이는 점점 깊어지는 특징이 있다
- 합성곱 .. 기능적으로는
- 이미지에 있는 어떤 특징을 찾는다..
- 처음에는 간단한 특징을 찾고
- 층이 깊어질수록 다양하고 구체적인 특징을 감지할 수 있도록 필터의 갯수를 늘림.
- 위치에 상관없이 감지할 수 있도록 너비와 높이 차원을 줄임.
합성곱 신경망을 사용한 이미지 분류
- 이미지 분류 신경망 구조
- 합성곱 층으로 이미지에서 특징을 감지 → 밀집층으로 클래스에 따른 확률 계산
- keras.layers.Conv2D
- keras.layers.MaxPool2D
- 입력의 너비와 높이를 줄이는 역할
- 전형적인 크기 (2,2) 왜지? → 1/2로 줄어든다.
- 여러 층의 합성곱으로 구성
- 첫 번째 층은 이미지의 직접적인 특징을 감지
- 두 번째 층은 첫 번째 층에서 감지한 특징을 보다 추상화한 형태로 감지
- 32개의 필터를 입력 받아서 64개의 필터로..
- plot_model 로 그릴 수 있다. summary
- 옵티마이저, 손실함수, 콜백(ModelCheckpoint, EarlyStopping) 지정 후 학습
- optimizer=’adam’, loss=’sparse_categorical_crossentropy’
합성곱 신경망의 시각화
- 합성곱 신경망은 이미지에 있는 특징을 찾아 압축하는 데 뛰어난 성능을 발휘
- keras에서 모델을 만들 때 Sequential 말고 함수형 API로 만들 수도 있다.
- 중간중간 결과를 알고 싶을 때는 함수형 API가 더 편하다.
- 필터(커널)의 역할 : 이미지의 어떤 특징을 크게 두드러지게 표현하는 역할
- 함수형 API : Model 클래스
- Sequential 대신..
- 좀 더 복잡한 모델을 생성할 때 사용
- 이미 만들어진 모델에서 새로운 모델을 만들 때도 사용
- 예제
inputs = keras.Input(shape=(784,)) dense1 = keras.layers.Dense(100, activation='sigmoid') dense2 = keras.layers.Dense(10, activation='softmax') hidden = dense1(inputs) outputs = dense2(hidden)
- inputs는 InputLayer의 출력
- Input() 함수
- 합성곱 층을 쌓을수록 뒤쪽에 있는 층에서는 앞쪽에서 감지한 시각적인 정보를 바탕으로 추상적인 정보를 학습한다(고 볼 수 있다)