더북(TheBook)

이 코드는 예측을 위한 이미지 배치가 이미 하나의 텐서 examples.xs로 준비되었다고 가정합니다. 이 텐서의 크기는 (배치 차원을 포함하여) [100, 28, 28, 1]입니다. 첫 번째 차원은 model.predict() 메서드로 예측을 수행할 샘플이 100개라는 것을 나타냅니다. model.predict()[100, 10] 크기의 2D 텐서를 반환합니다. 이 출력의 첫 번째 차원은 샘플 개수에 해당하며, 두 번째 차원은 열 개의 가능한 숫자에 상응합니다. 출력 텐서의 행은 각 이미지 입력에 대해 열 개 숫자에 할당된 확률 값입니다. 예측 값을 결정하려면 이미지별로 가장 큰 확률 값을 가진 인덱스를 찾아야 합니다. 다음 코드에서 이를 수행합니다.

const axis = 1;
const labels = Array.from(examples.labels.argMax(axis).dataSync());

argMax() 함수는 주어진 축을 따라 가장 큰 값의 인덱스를 반환합니다. 이 경우 이 축은 두 번째 차원입니다(const axis = 1). argMax() 메서드가 반환한 값은 [100, 1] 크기의 텐서입니다. dataSync()를 호출하여 [100, 1] 크기 텐서를 길이가 100인 Float32Array로 변환합니다. 그다음, Array.from()Float32Array를 0~9 사이의 100개 정수를 담고 있는 일반적인 자바스크립트 배열로 변환합니다. 이 예측 배열은 이해하기 쉽습니다. 100개의 입력 이미지에 대해 모델이 만든 분류 결과입니다. MNIST 데이터셋의 경우 타깃 레이블(0~9)은 출력 인덱스와 동일합니다. 따라서 이 배열을 문자열 레이블로 바꿀 필요가 없습니다. 예측 배열은 다음 라인에서 사용되어 테스트 이미지와 함께 분류 결과를 그리는 함수를 호출합니다(그림 4-10).

▲ 그림 4-10 훈련한 후 모델이 만든 예측 결과와 MNIST 이미지

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.