只能将一个元素张量转换为 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])])
然后您可以使用 reshape
或 view
:
恢复所需的格式
R.reshape(A.shape)
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])])
然后您可以使用 reshape
或 view
:
R.reshape(A.shape)