특성추출부의 층들이 깊어지면서 조금 더 디테일한 특징들을 잡아낸 후 특징들이 모여서 최종 판단
패딩
축소샘플링
큰 값 : 중요한 데이터라고 인식
일반적으로 average pooling보다 max pooling을 많이 이용
1. 특성추출부(Conv - 특징이 되는 정보를 부각)
Conv2D : 2D 이미지 데이터에 대해서 특징이 되는 부분들을 부각
MaxPool2D : 2D 이미지 데이터에 대해서 필요없는 부분을 삭제cnn_model = Sequential() cnn_model.add(Conv2D(input_shape=(224,224,3), # 필터(돋보기)의 개수 -> 추출하는 특징의 개수를 설정(필터별로) filters=128, kernel_size=(3,3), # same : 원본데이터의 크기에 맞게 알아서 패딩을 적용(valid : 패딩 적용X) padding = 'same', activation = 'relu' ))
#### 2. 특성추출부(Pooling - 불필요한 정보 삭제)
```python
# pool_size : 디폴트 2(필터의 크기가 2X2)
cnn_model.add(MaxPool2D())
cnn_model.add(Conv2D(filters=256,
kernel_size=(3,3),
padding = 'same',
activation = 'relu'
))
cnn_model.add(MaxPool2D())
cnn_model.add(Conv2D(filters=256,
kernel_size=(3,3),
padding = 'same',
activation = 'relu'
))
cnn_model.add(MaxPool2D())
cnn_model.add(Conv2D(filters=64,
kernel_size=(3,3),
padding = 'same',
activation = 'relu'
))
cnn_model.add(MaxPool2D())
# MLP
cnn_model.add(Flatten())
cnn_model.add(Dense(128, activation='relu'))
cnn_model.add(Dense(64, activation='relu'))
cnn_model.add(Dense(32, activation='relu'))
cnn_model.add(Dense(3, activation='softmax'))
cnn_model.summary()
# CNN 첫 층에서의 파라미터수(w,b값)개수는 입력필터수 * 필터크기 * 채널수 + 필터수