只能将一个元素张量转换为 python 个标量

only one element tensors can be converted to python scalars

def Log(A):
    '''
    theta = arccos((tr(A)-1)/2)
    K=1/(2sin(theta))(A-A^T)
    log(A)=theta K
    '''
    theta=torch.acos(torch.tensor((torch.trace(A)-1)/2))
    K=(1/(2*torch.sin(theta)))*(torch.add(A,-torch.transpose(A,0,1)))
    
    return theta*K

def tensor_Log(A):
    blah=[[Log(A[i,j]) for j in range(A.shape[1])] for i in range(A.shape[0])]
    new=torch.tensor(blah)
    
    return new

ValueError: only one element tensors can be converted to Python scalars

在获取我的网络输出的训练过程中,上述函数产生了以下错误,它是在自定义层内调用的,我不知道它在引用什么,有什么想法吗?

您的列表理解中的问题 blah 是张量列表。

我会通过在 A.shape[0]A.shape[1] 上循环创建张量的平面列表,然后将所有内容堆叠到一个张量中。

R = torch.stack([Log(A[i,j]) for i in range(A.shape[0]) for j in range(A.shape[1])])

然后您可以使用 reshapeview:

恢复所需的格式
R.reshape(A.shape)