Wenn Pytorch das Modell trainiert, kann der Verlust aufgrund des Broadcast-Mechanismus nicht konvergieren

Beim Training eines sehr einfachen Kurvenanpassungsmodells ist der folgende Fehler aufgetreten:

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)

Die beiden Eingabeparameter von mse_loss unterscheiden sich von der Zieldimension, einer ist Torch.Size([30000, 1], der andere ist Torch.Size([30000], diese beiden Dimensionen übertragen die Dimension bei der Berechnung in Torch. Size( [30000, 30000], derzeit liegt ein Problem vor:

Der endgültige Ausgabewert der Funktion mse_loss ist (Zieleingabe) die Summe der Quadrate jeder Elementnummer dividiert durch Breite x Höhe, d. Nach der Übertragung dieser beiden Dimensionen sieht der Tensor jedoch wie folgt aus:

# 原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>)

Auf diese Weise weicht das Ergebnis bei Element-für-Element-Berechnungen von den Erwartungen ab und der berechnete Verlust ändert sich.

Acho que você gosta

Origin blog.csdn.net/weixin_42149550/article/details/117373799
Recomendado
Clasificación