怎么解决TypeError: transpose() received an invalid combination of arguments

遇到报错
TypeError: transpose() received an invalid combination of arguments - got (int, int, int), but expected one of:

  • (name dim0, name dim1)
  • (int dim0, int dim1)
    请问应该怎么解决呢?

根据错误信息,R.transpose(0, 2, 1) 函数接收到了 (int, int, int) 类型的参数,但是期望的参数类型是 (name dim0, name dim1) 或者 (int dim0, int dim1),这说明应该是输入的参数格式有误。

根据你的代码,R 是一个形状为 (B, 3, 3) 的张量,其中 B 是 batch size。因此,正确的 transpose 函数调用方式应该是:

R.transpose(1, 2)  # 将 R 张量的第 1 维和第 2 维进行转置

在这里,我们将第 1 维和第 2 维进行转置,因为你想要对每个 batch 中的 3x3 矩阵进行转置。

修改后的代码如下:

def mge_transform(g, a, normals=None):
    R = g[..., :3, :3]  # (B, 3, 3)
    p = g[..., :3, 3]  # (B, 3)

    if len(g.shape) == len(a.shape):
        b = F.matmul(a, R.transpose(1, 2)) + F.expand_dims(p, axis=1)
    else:
        raise NotImplementedError

如果还有问题,请检查一下 igtpoints_src 张量的维度是否与上述代码中的张量维度相同。

以下内容部分参考ChatGPT模型:


这个报错通常是因为使用了错误的参数组合,导致无法进行转置操作。建议检查代码中transpose()函数的参数是否正确,尤其是维度的顺序是否正确。另外,也可以尝试使用其他的转置函数,例如numpy中的transpose()函数。下面是一个示例代码:

import numpy as np

# 创建一个34列的矩阵
matrix = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

# 使用transpose()进行矩阵转置
result = np.transpose(matrix)

print(result)

在这个示例中,我们使用了numpy中的transpose()函数来进行矩阵转置,避免了使用原生的transpose()函数时可能出现的参数错误。


如果我的建议对您有帮助、请点击采纳、祝您生活愉快