Python Pytorch计算叠加张量的分离损失

Python Pytorch计算叠加张量的分离损失,python,machine-learning,torch,Python,Machine Learning,Torch,我有一个(N,k,1)张量,由k网络的叠加标量预测得到N是批次大小 所有预测的目标都相同,t。如何有效地计算损失(如MSE)?我现在所做的是对每个网络的预测进行拆分,并将单独的损失相加 带预测的叠加(N,k,1)张量 t#共同目标 预测=[范围内i的预测[:,i](堆叠的_预测.size()[1])] 损失=总和(预测中预测的自身损失(预测,t) optimizer.zero_grad() loss.backward() optimizer.step() 有没有更有效的方法来实现这一点?是的

我有一个
(N,k,1)
张量,由
k
网络的叠加标量预测得到
N
是批次大小

所有预测的目标都相同,
t
。如何有效地计算损失(如MSE)?我现在所做的是对每个网络的预测进行拆分,并将单独的损失相加


带预测的叠加(N,k,1)张量
t#共同目标
预测=[范围内i的预测[:,i](堆叠的_预测.size()[1])]
损失=总和(预测中预测的自身损失(预测,t)
optimizer.zero_grad()
loss.backward()
optimizer.step()

有没有更有效的方法来实现这一点?

是的,幸好您可以通过广播轻松地用python实现: 假设:

N=100 #For example
k=10 #For example
stacked_predictions = torch.randn(N, k, 1)  # (N, k, 1) tensor with the predictions
t = torch.randn(N,1)  # common target
然后,您可以得到有效的
损失的等效计算:

loss = k * nn.MSELoss()(stacked_predictions, t[:, None, :])
(在您的情况下,将nn.MSELoss()替换为
self.loss
)。 请注意,
t[:,None,:]
在中间的
t
中添加了另一个单体维度,因此
t
变成了形状
(N,1,1)
,而
堆叠的
是形状
(N,k,1)
。当您在这两个张量上调用
nn.MSELoss()
时,将广播深层的
t
,以匹配
堆叠的预测
的形状,这就省去了您自己重复
t
的需要


请注意,我添加了乘
k
,这是因为您想要的是维度1上的和,而不是平均值(大小为
k
)。如果你想得到所有预测的平均值,请省略乘法。

非常感谢!我的荣幸,费德里科:)