이 코드는 훈련이 진행됨에 따라 화면을 업데이트합니다. 예를 들어 손실과 정확도 값을 그래프로 출력합니다. 이는 훈련 과정을 모니터링하는 데 유용하지만, 모델 훈련에 꼭 필요한 것은 아닙니다. 훈련에 필수적인 부분은 다음과 같습니다.
• (model.fit() 메서드의 첫 번째 매개변수인) trainData.xs는 NHWC 크기 [null, 28, 28, 1] 크기 텐서로 표현된 MNIST 입력 이미지를 포함하고 있습니다.
• (model.fit() 메서드의 첫 번째 매개변수인) trainData.labels는 [null, 10] 크기의 원-핫 인코딩된 2D 텐서로 표현된 입력 레이블을 포함하고 있습니다.
• model.compile() 메서드에 사용된 손실 함수 categoricalCrossentropy는 MNIST와 같이 다중 분류 문제에 적합합니다. 3장에서 다룬 붓꽃 분류 문제에서도 같은 손실 함수를 사용했습니다.
• model.compile() 메서드에 지정된 지표는 'accuracy'입니다. 이 함수는 합성곱 신경망의 출력에 있는 열 개의 원소 중에 가장 큰 원소가 예측으로 주어질 때 올바르게 분류된 샘플의 비율을 계산합니다. 이 지표도 붓꽃 문제에 사용된 것과 같습니다. 크로스 엔트로피 손실과 정확도 지표 사이의 차이점을 다시 생각해 보죠. 크로스 엔트로피는 미분 가능하기 때문에 역전파 기반의 훈련이 가능합니다. 반면 정확도 지표는 미분 가능하지 않지만 이해하기 더 쉽습니다.
• model.fit() 메서드에 지정된 batchSize 매개변수. 일반적으로 큰 배치 크기가 작은 배치 크기에 비해 모델의 가중치에 대해 더 일정하고 변동이 덜한 그레이디언트 업데이트를 만듭니다. 하지만 배치 크기가 크면 훈련에 더 많은 메모리가 필요합니다. 같은 양의 훈련 데이터에서 큰 배치 크기는 에포크당 그레이디언트 업데이트 횟수를 줄인다는 것을 기억하세요. 따라서 큰 배치 크기를 사용하면 훈련하는 동안 실수로 가중치 업데이트 횟수를 줄이지 않도록 에포크 횟수를 늘려야 합니다. 따라서 여기에는 균형점이 있습니다. 이 예제에서는 다양한 하드웨어에서 동작할 수 있도록 비교적 작은 배치 크기인 64를 사용합니다. 다른 매개변수와 마찬가지로 소스 코드를 수정하고 페이지를 새로 고침하여 다른 배치 크기의 영향을 실험할 수 있습니다.