
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)의 가중치를 그대로 가져와 분류기(=완전 연결 신경망) 부분만 설계해서 사용