При обучении очень простой модели подбора кривой я столкнулся со следующей ошибкой:
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>)
Таким образом, при выполнении поэлементных расчетов результат отличается от ожидаемого, и расчетные потери меняются.