5.1 합성곱 신경망 소개

#기본적인 컨브넷의 모습 

from keras import layers
from keras import models

model = models.Sequential()
model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3,3), activation='relu'))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3,3), activation='relu'))

-컨브넷이 (image_height, image_width, image_channels) 크기의 입력 텐서를 사용한다는 점이 중요하다!

-여기서는 MNIST 이미지 포멧인 (28,28,1)크기의 입력을 처리하도록 설정하여 input_shape = (28,28,1)을 첫 번째 층의 매개변수로 전달했다.

-(3,3)은 kernel size(합성곱에 사용되는 필터의 크기)값이다.

지금까지의 컨브넷 구조를 model.summary() 메서드로 확인해보면

Screen Shot 2021-10-23 at 16.22.46.png

-Conv2D, MaxPooling2D 층의 출력은 (height, width, channels) 크기의 3D 텐서이다. 높이와 너비 차원은 네트워크가 깊어질수록 작아진다. 채널 수는 Conv2D 층에 전달된 첫 번째 매개변수(32,64)에 의해 조절된다.

-이 다음 단계에서 마지막 층의 출력 텐서(3,3,64)를 완전 연결 네트워크에 주입하는데 이 분류기는 1D 텐서를 처리하므로 몇 개의 층을 추가하여 3D 출력을 1D 텐서로 펼쳐야한다.

#컨브넷 위에 분류기 추가하기

model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))

10개의 클래스를 분류하기 위해 마지막 층의 출력 크기를 10으로하고 softmax 활성화 함수를 사용한다

Screen Shot 2021-10-23 at 21.43.28.png

(3,3,64)출력이 (576,) 크기 벡터로 펼쳐진 후 Dense층으로 주입되었다.

이제 MNIST 이미지에 컨브넷 훈련을 진행한다