• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

모델 평가 부분 질문드립니다.

21.08.12 03:10 작성 조회수 1.4k

2

-, predicted = torch.max(outputs.data, 1)

앞에 -, 이부분 코드가 무슨 의미인가요?

빨간색 표시한 부분 혹시 자세하게 코드 해설 가능할까요?

답변 1

답변을 작성해보세요.

7

안녕하세요!

outputs의 크기가 (배치 크기)x(클래스의 개수)이므로  열이 하나의 이미지의 대응되는 벡터를 나타냅니다. 따라서 행(0), 열(1) 중 열을 기준으로 최댓값을 뽑아 예측값을 하나 만드는 것입니다. 예를 들어서 배치 크기가 2이고 클래스가 3개인 outputs가 있다고 생각해봅니다.

outputs = [[0.1, 0.4, 0.5], [0.2, 0.6, 0,2]] 

여기서의 최댓값의 위치는 2번째(0.5)와 1번째(0.6)입니다. 즉, 첫번째 이미지는 2라고 예측하는 것이고 두번째 이미지는 1이라고 예측을 하게 됩니다. 이를 torch.max를 이용하여 나타냅니다.

torch.max는 최댓값과 최댓값의 위치를 산출해주는데 여기서 우리는 최댓값은 필요가 없으므로 받지 않아도 됩니다. 따라서 _ (언더바)로 처리하여 해당 출력값은 저장하지 않겠다는 의미입니다. 즉, _, predicted는 최댓값의 위치만 predicted에 저장하겠다는 의미입니다.

따라서 _, predicted = torch.max(outputs.data, 1)의 의미는 각 열(1)마다 최댓값의 위치를 예측값으로 사용하겠다는 의미입니다. 마지막으로 .data는 예측값을 계산할 때는 역전파 계산이 필요없기 때문에 데이터만 사용한다는 의미에서 사용된 것입니다. ( 그런데 지금 보니까 with torch.no_grad()를 사용했기 때문에 .data를 없애도 될 것 같습니다.)

열공하세욧 :)

정찬희님의 프로필

정찬희

질문자

2021.08.12

와우.. 너무 완벽하게 설명해주셔서 감사합니다.