torch.sub 的输出错误?
Wrong outputs from torch.sub?
我目前正在使用 torch.sub 和 torch.div 来获得神经网络的预测标签和真实标签之间的 MAPE,尽管我没有得到我期望的答案。根据文档中的示例,我应该得到一个 4x1 张量,而不是 4x4。
谁能帮我解决这个问题?
print('y_true ', y_true)
y_true tensor([[ 46],
[262],
[ 33],
[ 35]], device=‘cuda:0’, dtype=torch.int16)
print('y_pred ', y_pred)
y_pred tensor([[[308.5075]],
[[375.8983]],
[[389.4587]],
[[406.4957]]], device=‘cuda:0’, grad_fn=)
print('torch.sub ', torch.sub(y_true, y_pred))
torch.sub tensor([[[-262.5075],
[ -46.5075],
[-275.5075],
[-273.5075]],
[[-329.8983],
[-113.8983],
[-342.8983],
[-340.8983]],
[[-343.4587],
[-127.4587],
[-356.4587],
[-354.4587]],
[[-360.4957],
[-144.4957],
[-373.4957],
[-371.4957]]], device='cuda:0', grad_fn=<SubBackward0>)
那是因为y_pred
有一个额外的维度,这意味着y_true
张量
可能会广播到正确的维度。
如果删除多余的最后一个维度,您将获得所需的结果:
>>> torch.sub(y_true, y_pred[...,0]).shape
torch.Size([4, 1])
我目前正在使用 torch.sub 和 torch.div 来获得神经网络的预测标签和真实标签之间的 MAPE,尽管我没有得到我期望的答案。根据文档中的示例,我应该得到一个 4x1 张量,而不是 4x4。 谁能帮我解决这个问题?
print('y_true ', y_true)
y_true tensor([[ 46],
[262],
[ 33],
[ 35]], device=‘cuda:0’, dtype=torch.int16)
print('y_pred ', y_pred)
y_pred tensor([[[308.5075]],
[[375.8983]],
[[389.4587]],
[[406.4957]]], device=‘cuda:0’, grad_fn=)
print('torch.sub ', torch.sub(y_true, y_pred))
torch.sub tensor([[[-262.5075],
[ -46.5075],
[-275.5075],
[-273.5075]],
[[-329.8983],
[-113.8983],
[-342.8983],
[-340.8983]],
[[-343.4587],
[-127.4587],
[-356.4587],
[-354.4587]],
[[-360.4957],
[-144.4957],
[-373.4957],
[-371.4957]]], device='cuda:0', grad_fn=<SubBackward0>)
那是因为y_pred
有一个额外的维度,这意味着y_true
张量
可能会广播到正确的维度。
如果删除多余的最后一个维度,您将获得所需的结果:
>>> torch.sub(y_true, y_pred[...,0]).shape
torch.Size([4, 1])