【问题标题】:Lorentzian inner product in matrix form using Pytorch使用 Pytorch 的矩阵形式的洛伦兹内积
【发布时间】:2021-08-28 13:17:59
【问题描述】:

我想计算洛伦兹内积,即 = -x1y1 + x2y2 + x3y3 +... 我有代码

 res = torch.sum(x * y, dim=-1) - 2 * x[..., 0] * y[..., 0]

但这不起作用,因为我不断收到此错误 - RuntimeError:张量 a (450) 的大小必须与非单维 0 处的张量 b (30) 的大小相匹配

我需要矩阵形式的内积。所以我这样做了-

 res = torch.matmul(x,torch.transpose(y,0,1))
-2*torch.matmul(x[...,0],torch.transpose(y[...,0],0,0))

但我收到一个新错误 RuntimeError:张量大小不一致,预计张量 [450] 和 src [30] 具有相同数量的元素,但分别获得了 450 和 30 个元素。

我已经在一个简单的玩具示例中尝试过这个 -

x = torch.tensor([[1, 2, 3]])
y = torch.tensor([[2, 2, 2]])
prod = torch.matmul(x,torch.transpose(y,0,1))-2*torch.matmul(x[...,0],torch.transpose(y[...,0],0,0))
print(prod)

输出:张量([[8]]),这是正确的。但不知何故在我正在处理的应用程序中似乎不起作用。

我不知道如何解决这个问题。欢迎任何见解!

【问题讨论】:

  • 你能在真实场景中获取/打印输入向量的形状吗?如果是这样,请使用这些形状创建一个玩具示例。只需在内积前添加print(x.shape, y.shape)
  • 您好,感谢您的意见。我这样做了 - import torch x = torch.tensor([[1, 2, 3]]) y = torch.tensor([[2, 2, 2]]) x[...,0] *= -1 res = torch.matmul(x,torch.transpose(y,0,1)) 打印 (res)。我的应用程序代码开始工作了。
  • 不错!随意用解决它的代码回答你自己的问题。它可能对其他人有用。

标签: python numpy pytorch matrix-multiplication


【解决方案1】:

所以我这样做了-

import torch
x = torch.tensor([[1, 2, 3]])
y = torch.tensor([[2, 2, 2]])
x[...,0] *= -1
res = torch.matmul(x,torch.transpose(y,0,1))
print (res)

它开始为我的应用程序工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 2020-04-22
    • 2020-02-23
    • 1970-01-01
    相关资源
    最近更新 更多