내 출력이 20 값의 텐서 인 PyTorch를 사용하여 회귀 문제를 해결하기 위해 CNN 아키텍처를 훈련하고 있습니다. 모델의 손실 함수로 RMSE를 사용하려고 계획하고 PyTorch를 사용하려고 시도했고이를 위해 nn.MSELoss()
제곱근을 사용 torch.sqrt()
했지만 결과를 얻은 후 혼란 스러웠습니다. 이유를 설명하기 위해 최선을 다할 것입니다. 배치 크기의 경우 bs
출력 텐서의 치수가 [bs , 20]
.I 내 자신의 RMSE 기능을 구현하려고 시도했습니다.
def loss_function (predicted_x , target ):
loss = torch.sum(torch.square(predicted_x - target) , axis= 1)/(predicted_x.size()[1]) #Taking the mean of all the squares by dividing it with the number of outputs i.e 20 in my case
loss = torch.sqrt(loss)
loss = torch.sum(loss)/predicted_x.size()[0] #averaging out by batch-size
return loss
그러나 나의 출력 loss_function()
과 PyTorch가 nn.MSELoss()
다른. 내 구현이 잘못되었는지 또는 nn.MSELoss()
잘못된 방식으로 사용 하고 있는지 확실하지 않습니다 .
MSE 손실은 오차 제곱 의 평균 입니다 . MSE를 계산 한 후 제곱근을 취하므로 손실 함수의 출력을 PyTorch 함수 의 출력과 비교할 방법이 없습니다 . 서로 다른 값을 계산합니다.nn.MSELoss()
그러나, 당신은 단지를 사용할 수 있습니다 nn.MSELoss()
자신의 RMSE 손실 함수를로 만들 수 :
loss_fn = nn.MSELoss()
RMSE_loss = torch.sqrt(loss_fn(prediction, target))
RMSE_loss.backward()
도움이되기를 바랍니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다