pytorch MSELoss 계산 평균의 실현 방법
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가 존재하기 때문입니다.
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.만약 잘못이 있거나 완전한 부분을 고려하지 않으신다면 아낌없이 가르침을 주시기 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정확도에서 스케일링의 영향데이터셋 스케일링은 데이터 전처리의 주요 단계 중 하나이며, 데이터 변수의 범위를 줄이기 위해 수행됩니다. 이미지와 관련하여 가능한 최소-최대 값 범위는 항상 0-255이며, 이는 255가 최대값임을 의미합니다. 따...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.