Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy/PyTorch有趣张量积_Python_Numpy_Pytorch_Torch_Algebra - Fatal编程技术网

Python Numpy/PyTorch有趣张量积

Python Numpy/PyTorch有趣张量积,python,numpy,pytorch,torch,algebra,Python,Numpy,Pytorch,Torch,Algebra,我有一个四维火炬张量参数,定义如下: nn.parameter.Parameter(data=torch.Tensor((13,13,13,13)), requires_grad=True) 四个带dims的张量(批次号,13)(或一个带dims的张量(批次号,4,13))。 我想得到一个dims(batch_size)等于图片末尾公式的张量: [编辑:我在第一张图片中犯了一个错误,我已经改正了] 我在torch文档中看到了函数tensordot,但我自己无法使它工作。每当你有一个有趣的ten

我有一个四维火炬张量参数,定义如下:

nn.parameter.Parameter(data=torch.Tensor((13,13,13,13)), requires_grad=True)
四个带dims的张量(批次号,13)(或一个带dims的张量(批次号,4,13))。 我想得到一个dims(batch_size)等于图片末尾公式的张量: [编辑:我在第一张图片中犯了一个错误,我已经改正了]
我在torch文档中看到了函数tensordot,但我自己无法使它工作。

每当你有一个有趣的tensor产品(或)时,你的朋友是:

batch\u size=5
A=火炬.兰特(13,13,13,13)
a=火炬.兰特(批次尺寸,13)
b=火炬.兰特(批次尺寸,13)
c=火炬.兰特(批次尺寸,13)
d=火炬.兰特(批次尺寸,13)
B=火炬。einsum('ijkl,bi,bj,bk,bl->B',A,A,B,c,d)

可以肯定的是,您正在用
i
为输出B编制索引,但它不同于执行最外层求和的静音变量,对吗?是
result=(A[None,:,:,:,:,:,:,:,:,:,:]*X[,:,None,None]*Y[,None,:,None,None]*Z[,None,None,:,None]*T[,None,None,None,:])。展平(1)求和(dim=1)
您想要什么?如果是这样的话,我可以发布答案并给出解释。我感到困惑和不作为答案发布的唯一原因是在你发布的等式的左侧和右侧使用下标I。@trialNerror我已经更正了我的图片,你是对的,我必须为批处理元素添加一个b变量。@jodag我不确定这是我试图做的,如X,Y,方程中的Z和T是dims 5的张量,而我的是dims 2的张量。太好了,非常感谢,我不知道这个函数。它也能在gpu上工作吗?@Jogima_-cyber
torch.einsum
是pytorch基本操作的一部分。它不仅可以在cpu/gpu上工作,还可以将梯度传播到输入张量。如此伟大,如此复杂的隐藏计算。