torch.F.softmax() 안에 포함되어 있어서 grad 다름
# 가중치(로짓) 정의 weights = torch.tensor([0.2, 0.4, 0.1, 0.3], requires_grad=True) # 실제 레이블 정의 (클래스 2가 정답, 인덱스는 0부터 시작하므로 '2'는 세 번째 클래스를 의미) labels = torch.tensor([2]) # retain_grad() 호출하여 그래디언트 유지 weights.retain_grad() # 그래디언트 유지 # 교차 엔트로피 손실 재계산 loss = F.cross_entropy(weights.unsqueeze(0), labels) # 역전파 재실행 loss.backward() # probabilities의 그래디언트 출력 print(probabilities) # function softmax print(probabilities.grad)