이제 모델을 컴파일하는 단계입니다.
model.compile("rmsprop", ="sparse_categorical_crossentropy", =["accuracy"])=
sparse_categorical_crossentropy는 손실 함수입니다. 가중치 텐서를 학습하기 위한 피드백 신호로 사용되며 훈련하는 동안 최소화됩니다. 미니 배치 확률적 경사 하강법을 통해 손실이 감소됩니다. 경사 하강법을 적용하는 구체적인 방식은 첫 번째 매개변수로 전달된 rmsprop 옵티마이저에 의해 결정됩니다.
마지막으로 훈련 반복입니다.
model.fit(train_images, train_labels, 5, =128)
=fit 메서드를 호출했을 때 다음과 같은 일이 일어납니다. 모델이 128개 샘플의 미니 배치로 훈련 데이터를 다섯 번 반복합니다(전체 훈련 데이터에 수행되는 각 반복을 에포크(epoch)라고 합니다). (미적분의 연쇄 법칙에서 파생된 역전파 알고리즘을 사용하여) 각 배치에서 모델이 가중치에 대한 손실의 그레이디언트를 계산합니다. 그다음 이 배치에서 손실 값을 감소시키는 방향으로 가중치를 이동시킵니다.
다섯 번의 에포크 동안 모델은 2,345번의 그레이디언트 업데이트를 수행할 것입니다(에포크마다 469번28). 아마 모델의 손실이 충분하게 낮아져서 높은 정확도로 손글씨 숫자를 구분할 수 있을 것입니다.
여기까지 읽었다면 이미 신경망에 대해 많이 알았을 것입니다. 텐서플로를 사용하여 첫 번째 예제의 간소화된 버전을 ‘밑바닥부터’ 단계별로 다시 구현해 보면서 배운 것을 검증해 보겠습니다.