Когда pytorch обучает модель, яма из-за механизма трансляции: потери не могут сходиться

При обучении очень простой модели подбора кривой я столкнулся со следующей ошибкой:

C:/Users/user/Desktop/test/test.py:58: UserWarning: Using a target size (torch.Size([30000])) that is different to the input size (torch.Size([30000, 1])). This will likely lead to incorrect results due to broadcasting. Please ensure they have the same size.
  loss = F.mse_loss(out, yt)

Два входных параметра mse_loss отличаются от целевого измерения: один — torch.Size([30000, 1], другой — torch.Size([30000], эти два измерения передают размер в torch при расчете. Size( [30000, 30000], на данный момент есть проблема:

Окончательное выходное значение функции mse_loss представляет собой (целевой вход) сумму квадратов числа каждого элемента, деленную на ширину x высоту, то есть оно усредняется как по размеру пакета, так и по размеру элемента. Но после трансляции этих двух измерений тензор станет таким:

# 原tensor:yt
yt tensor([ 96.6252, -83.4613,  -1.6751,  ...,   1.8656, -15.8007, -30.5789]) torch.Size([30000])

# 广播之后:yt
yt tensor([[ 96.6252, -83.4613,  -1.6751,  ...,   1.8656, -15.8007, -30.5789],
        [ 96.6252, -83.4613,  -1.6751,  ...,   1.8656, -15.8007, -30.5789],
        [ 96.6252, -83.4613,  -1.6751,  ...,   1.8656, -15.8007, -30.5789],
        ...,
        [ 96.6252, -83.4613,  -1.6751,  ...,   1.8656, -15.8007, -30.5789],
        [ 96.6252, -83.4613,  -1.6751,  ...,   1.8656, -15.8007, -30.5789],
        [ 96.6252, -83.4613,  -1.6751,  ...,   1.8656, -15.8007, -30.5789]])

###############################################################################

# 原tensor:out
out tensor([[62.2171],
        [34.9442],
        [92.2927],
        ...,
        [16.6877],
        [35.8723],
        [60.5973]], grad_fn=<MmBackward>) torch.Size([30000, 1])

# 广播之后:out
out tensor([[62.2171, 62.2171, 62.2171,  ..., 62.2171, 62.2171, 62.2171],
        [34.9442, 34.9442, 34.9442,  ..., 34.9442, 34.9442, 34.9442],
        [92.2927, 92.2927, 92.2927,  ..., 92.2927, 92.2927, 92.2927],
        ...,
        [16.6877, 16.6877, 16.6877,  ..., 16.6877, 16.6877, 16.6877],
        [35.8723, 35.8723, 35.8723,  ..., 35.8723, 35.8723, 35.8723],
        [60.5973, 60.5973, 60.5973,  ..., 60.5973, 60.5973, 60.5973]],
       grad_fn=<ExpandBackward>)

Таким образом, при выполнении поэлементных расчетов результат отличается от ожидаемого, и расчетные потери меняются.

Guess you like

Origin blog.csdn.net/weixin_42149550/article/details/117373799