nn.MSELoss 输入维度不匹配问题

问题描述 投票:0回答:1

我最近开始学习如何使用 torch,但是当我处理顺序数据时。例如,训练 x(输入)是形状为 ([1, 60, 278]) 的张量,而训练 y(目标)具有形状 ([1, 278])。批量大小只是1。我可以直接使用下面的代码来计算MSE吗?

criterion = nn.MSELoss()
mse = criterion(input, target)

我不知道为什么有时它没有返回错误,但有时却返回错误:请确保它们具有相同的大小。 返回F.mse_loss(输入,目标,减少= self.reduction)

我是否需要复制目标以便目标的尺寸可以匹配输入? 我还发现函数中有一些参数,例如“reduction”、“size_average”、“reduce”。他们对解决这个问题有帮助吗?

python tensor torch loss-function mse
1个回答
1
投票

函数

MSELoss
MSELoss = lambda x, y: torch.mean((x - y)**2)
定义(缩减均值是默认行为)。 在这里,您尝试将减号运算符
-
应用于两个不同形状的张量。先验地它是被禁止的,但 pytorch 很方便,并且会尝试改变张量以具有兼容的形状。在这里,他看到
input
的第一维和第三维轴与
target
的轴相同,但第二个轴在后面的张量中不存在。在这种情况下,在应用函数之前,pytorch 将重复
targets
的行 60 次以匹配良好的形状
shape(1, 60, 278)
。但这可能不是您需要的!

在您的情况下,您可能需要使用模型计算序列的单向量表示,以便预测形状

shape(1, 278)
,然后您可以计算您的标准:
criterion(model(inputs), target)
并避免重复行。

编辑:根据链规则,参数的损失梯度是根据输出的损失梯度来缩放的,所以我所说的一般来说是正确的,不仅适用于线性模型

© www.soinside.com 2019 - 2024. All rights reserved.