https://github.com/eazuooz/BostonHousing
보스턴 집값 예측 예제에서는 출력이 1개(집값)였습니다. 하지만 집값과 함께 지역, 집주인 나이처럼 여러 값을 동시에 예측하고 싶다면, 같은 데이터로 모델을 여러 개 학습할 필요는 없습니다. 출력값을 억지로 하나로 합치기보다, 출력층을 여러 개로 설계해 집값·지역·나이를 각각 출력하게 하면 모델 하나로 다중 예측을 할 수 있습니다.

또한 회귀와 분류는 값을 직접 예측하느냐, 어떤 범주에 들어가느냐의 문제이므로 서로 상관없어 보이지만, 사실 두 문제는 매우 비슷합니다. 신경망의 출력을 그대로 사용하면 회귀가 되고, 출력을 확률 분포로 바꿔 주면 분류 문제가 됩니다.

회귀 와 분류 의 차이 신경망 의 출력 을 그대로 사용 집값 지역 : 나이 신경망 의 출력 을 확률 분포 로 바꿔 ( 소프트 맥스 ) 사용 집값 지역 나이 소프트 맥스 회귀 모델 과 분류 모델 의 차이 를 나타낸 그림
회귀 모델과 분류 모델은 신경망 구조가 완전히 동일하지만, 분류 모델은 최종적으로 출력을 소프트맥스 함수를 통해 확률 분포로 변환합니다. 그대로 출력값을 이용해도 상관없지만, 분류 문제에서 출력을 확률 분포로 바꿔 주는 까닭은 출력값의 범위를 0과 1 사이로 제한해야 해석이 용이하기 때문입니다. 이번 절에서는 여러 출력을 갖는 신경망을 이용해 다중 분류 문제를 알아보겠습니다. 0부터 9까지의 10개 숫자를 손글씨로 표현한 손글씨 데이터 셋을 사용해 실습하겠습니다.
그럼 손글씨 데이터 셋을 사용해서 다중 출력을 연습해보겠습니다. MNIST는 0부터 9까지 10가지의 손글씨 이미지로 구성된 데이터 셋입니다.
아래 코드는 **MNIST(손글씨 숫자 0~9)**를 이용해 간단한 다층 퍼셉트론(MLP)을 학습하고, 저장/불러오기, 정확도 평가, 샘플 시각화까지 한 번에 진행하는 예제입니다.
<aside> 📌
이 코드에서 nn.CrossEntropyLoss()를 사용하므로,
nn.Linear(..., 10)까지만 둡니다.CrossEntropyLoss 내부에서 (LogSoftmax + NLLLoss) 처리가 포함되어 있어 로짓(logits)을 그대로 넣는 것이 정석입니다.
</aside>
MNIST는 다음 형태로 들어옵니다.
ToTensor()로 인해 0~1 범위의 float간단히 데이터 개수와 샘플 이미지를 확인할 수 있습니다.