Flatten
으로 펴준 뒤에 연산
CNN 구조
합성곱 층(Convolution Layer)
풀링 층(Pooling Layer)
완전 연결 신경망(Fully Connected Layer)
출력층(Output Layer)
합성곱 필터(Convolution Filter)
가 슬라이딩(Sliding)하며 이미지 부분부분의 특징을 읽어나감
필터
가 왼쪽 위부터 오른쪽으로 슬라이딩하며 합성곱 진행
결과값: Feature Map
단점 -> output(=Feature Map)이 작아짐
이미지의 특징을 찾아내기 위한 공용 파라미터
Kernel
이라고도 함 (Filter = Kernel)
일반적으로 (3, 3)이나 (5, 5)과 같은 정사각 행렬로 정의
입력 데이터를 지정된 간격으로 순회하며 채널별로 합성곱을 하고 모든 채널(컬러의 경우 3개)의 합성곱의 합을 Feature Map
으로 만듦
=> 지정된 간격으로 이동하면서 전체 입력데이터와 합성곱해 Feature Map
만듦
외부를 특정한 값으로 둘러싸서 처리해주는 방식
Output(=Feature map
) 의 크기 조절, 실제 이미지 값을 충분히 활용하기 위해 사용
'0'으로 둘러싸주는 제로-패딩(Zero-Padding)
이 가장 많이 사용됨
padding='valid'
: no padding (패딩 적용X)
padding=’same'
: results in padding with zeros evenly to the left/right or up/down of the input.
입력의 왼쪽/오른쪽 또는 위/아래에 균일하게 0이 채워짐
(=> 인풋과 아웃풋이 동일한 길이를 갖도록 0으로 패딩)
padding="same"
and strides=1
-> output has the same size as the input.
tf.keras.layers.Conv2D | TensorFlow Core v2.8.0
필터가 이동하는 보폭(=간격)을 결정
-> 슬라이딩(Sliding)시에 몇 칸 씩 건너뛸지
Stride=1
-> 필터 1칸씩 이동
Stride=2
-> 필터 2칸씩 이동
Feature map
의 크기는 작아짐 : 입력되는 이미지의 크기(=피처 수)
: 출력되는 이미지의 크기(=피처 수)
: 합성곱에 사용되는 커널(=필터)의 크기
: 합성곱에 적용한 패딩 값
: 합성곱에 적용한 스트라이드 값
Step 1)
Step 2) -> Stride = 1
Stride) -> Stride = 2
Padding)
model = Sequential()
model.add(Conv2D(3, (5, 5), activation='relu', input_shape=(100, 100, 3))) # ---- (A)
model.add(MaxPooling2D((2, 2)))
model.add(Flatten())
model.add(Dense(5, activation='softmax'))
=> 225
filter
가 가중치가로, 세로 방향의 공간을 줄이기 위해 사용
풀링 층은 학습해야 할 가중치가 없어 채널 수가 변하지 않음
최대 풀링(Max pooling)
평균 풀링(Average pooling)
주로 풀링 사이즈랑 같은 값의 Stride
사용
Stride
=2Stride
=3합성곱 층(Convolutional Layer)
, 풀링 층(Pooling Layer)
에서 충분히 특징 추출 -> 완전 연결 신경망(Fully Connected Layer)
구축
다층 퍼셉트론 신경망
으로 구성
풀어야 하는 문제에 따라 출력층을 잘 설계해주는 것이 중요
Filter
의 가중치를 학습Filter
는 더 큰 특징을 포착"거인의 어깨에 올라서서 더 넓은 세상을 바라보라"
-> 이미 잘 정립된 지식을 바탕으로 하여 더 높은 곳에 이를 수 있었다
사전 학습 모델(Pre-trained Model)
의 가중치를 그대로 가져와 분류기(=완전 연결 신경망)
부분만 설계해서 사용