pytorch MSELoss 계산 평균의 실현 방법

2598 단어 pytorchMSELoss평균
손실 함수에 대한 입력 y,pred,shape는 모두 bxc입니다.
loss_를 설정하면fn = torch.nn.MSELoss(reduction='mean'), 최종 출력값은 사실 (y-pred) 모든 원소 숫자의 제곱과 나누기(bxc), 즉batch와 특징 차원에서 모두 평균을 얻었다.

만약 batch에서만 평균을 하고 싶다면, 이렇게 쓸 수 있다.


loss_fn = torch.nn.MSELoss(reduction='sum')
loss = loss_fn(pred, y) / pred.size(0)
보충: PyTorch에서 MSELoss 사용

매개 변수


torch.nn.MSELoss(size_average=None, reduce=None, reduction: str = 'mean')
size_average와reduce는 현재 버전의pytorch에서 사용을 권장하지 않습니다. Reduction만 설정하면 됩니다.
reduction의 선택할 수 있는 매개 변수는'none','mean','sum'입니다.reduction='none': 모든 대응하는 위치의 차이의 제곱을 구하면 원래의 형상과 같은 행렬로 되돌아온다.reduction='mean': 모든 대응하는 위치차의 제곱의 균일치를 구하고 되돌아오는 것은 하나의 표량이다.reduction='sum': 모든 대응하는 위치차의 제곱의 합을 구하고 되돌아오는 것은 하나의 표량이다.
더 보기공식 문서

예를 들다


먼저 세 개의 데이터 샘플이 각각 신경 네트워크 연산을 거쳐 세 개의 출력과 라벨을 얻는다고 가정하면 다음과 같다.

y_pre = torch.Tensor([[1, 2, 3],
                      [2, 1, 3],
                      [3, 1, 2]])

y_label = torch.Tensor([[1, 0, 0],
                        [0, 1, 0],
                        [0, 0, 1]])
만약 reduction='none':

criterion1 = nn.MSELoss(reduction='none')
loss1 = criterion1(x, y)
print(loss1)
내보내기:
tensor([[0., 4., 9.],
[4., 0., 9.],
[9., 1., 1.]])
만약 reduction='mean':

criterion2 = nn.MSELoss(reduction='mean')
loss2 = criterion2(x, y)
print(loss2)
내보내기:
tensor(4.1111)
만약 reduction='sum':

criterion3 = nn.MSELoss(reduction='sum')
loss3 = criterion3(x, y)
print(loss3)
내보내기:
tensor(37.)

역방향 전파 시 사용


일반적으로 역방향으로 전파할 때, 모두loss를 먼저 구하고loss를 사용한다.backward () 매개 변수에 대한 loss 구하기 w_ij와 b의 편도수.
여기서 주의해야 할 것은 벡터 () 함수를 실행할 수 있기 때문에 역방향 전파에서'none'로 설정할 수 없습니다.
구체적으로'sum'이나'mean'으로 설정해도 된다.
'sum'으로 설정하면 Loss=loss_1+loss_2+loss_3, 전체 Loss가 각 인스턴스에 의해 생성됨을 나타냅니다_i 구성, Loss를 통해 사다리를 구할 때 각각loss_i의 사다리도 모두 고려했다.
'mean'으로 설정하면'sum'에 비해 Loss가 Loss*(1/i)로 변하는 것과 같습니다. 이것은 파라미터가 업데이트될 때 영향이 크지 않습니다. 학습률 a가 존재하기 때문입니다.
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.만약 잘못이 있거나 완전한 부분을 고려하지 않으신다면 아낌없이 가르침을 주시기 바랍니다.

좋은 웹페이지 즐겨찾기