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.