더북(TheBook)

이 밀집 층의 유닛이 세 개이기 때문에 이 벡터의 길이는 3입니다. 벡터의 원소는 실수이고 특정 범위로 제한되지 않습니다. 소프트맥스 활성화 함수는 이 벡터를 다음과 같은 값으로 변환합니다.

[0.0474107, 0.9522698, 0.0003195]

이 값은 다음과 같이 TensorFlow.js 코드를 실행하여 직접 확인할 수 있습니다(js.tensorflow.org 페이지에서 개발자 도구를 열어 콘솔에 입력할 수 있습니다33).

const x = tf.tensor1d([-3, 0, -8]);
tf.softmax(x).print();

소프트맥스 함수 출력의 세 원소는 1) 모두 [0, 1] 범위 안에 있고, 2) 모두 더하면 1이고, 3) 입력 벡터의 순서대로 나열되어 있습니다. 이런 성질 덕분에 이 출력을 전체 클래스에 대한 (모델의) 확률 값으로 이해할 수 있습니다. 이전 코드에서는 두 번째 범주의 확률이 가장 높고 세 번째 범주의 확률이 가장 낮습니다.

따라서 이런 종류의 다중 분류 모델의 출력을 사용할 때 소프트맥스 출력 원소 중 가장 높은 값의 인덱스를 최종 결정으로 삼을 수 있습니다. 입력이 어느 클래스에 속하는지에 대한 결정을 말합니다. 이 결정은 argMax() 메서드를 사용해 수행할 수 있습니다. 예를 들어 index.js에 있는 다음 코드를 참고하세요.

const predictOut = model.predict(input);
const winner = data.IRIS_CLASSES[predictOut.argMax(-1).dataSync()[0]];

predictOut[numExamples, 3] 크기의 2D 텐서입니다. argMax() 메서드를 호출하면 predictOut의 크기를 [numExample]로 축소시킵니다. argMax() 메서드의 매개변수 값 -1은 마지막 차원을 따라 최댓값을 찾아서 그 인덱스를 반환하라는 뜻입니다. 예를 들어 다음과 같은 predictOut 출력이 있다고 가정해 보죠.

[[0  , 0.6, 0.4],
 [0.8, 0 , 0.2]]

argMax(-1)은 마지막 (두 번째) 차원을 따라 찾은 최댓값이 첫 번째 샘플과 두 번째 샘플의 인덱스 1과 0에 있다는 것을 나타내는 텐서를 반환합니다.

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