이론적 관점에서 보면 MNIST는 열 개의 선택이 가능한 분류 문제입니다. 따라서 확률적인(랜덤하게 추측한) 정확도는 10%입니다. 99.0%는 이보다 훨씬 높습니다. 하지만 랜덤하게 추측한 정확도는 높은 기준이 못 됩니다. 모델에 있는 conv2d와 maxPooling2d 층의 가치를 어떻게 나타낼 수 있나요? 밀집 층만 사용했을 때도 이런 성능을 달성할까요?
이런 질문에 대한 답을 하기 위해 실험을 해 보겠습니다. index.js는 createDenseModel()이라는 또 다른 모델 생성 함수를 포함하고 있습니다. 코드 4-1에서 본 createConvModel()과 달리 createDenseModel()은 이 장에서 새롭게 배운 층을 사용하지 않고 flatten 층과 밀집 층만 가진 시퀀셜 모델을 만듭니다. createDenseModel()로 만든 모델의 전체 파라미터 개수는 앞서 훈련한 합성곱 신경망과 거의 비슷한 수준인 33,000개입니다. 따라서 공정하게 비교할 수 있습니다.
코드 4-3 합성곱 신경망과 비교하기 위해 flatten과 밀집 층만으로 만든 MNIST 모델
function createDenseModel() {
const model = tf.sequential();
model.add(tf.layers.flatten({inputShape: [IMAGE_H, IMAGE_W, 1]}));
model.add(tf.layers.dense({units: 42, activation: 'relu'}));
model.add(tf.layers.dense({units: 10, activation: 'softmax'}));
model.summary();
return model;
}