张量在pytorch 乘积及Turker分解,张量扩展

编写不易如果觉得不错,麻烦关注一下~

【1】参考连接https://blog.csdn.net/hopyGreat/article/details/86351972 【矩阵乘积】

【2】https://positive.blog.csdn.net/article/details/113744587?ivk_sa=1024320u【按元素乘积,直觉上卷积网络多通道的卷积操作。】

【3】https://blog.csdn.net/weixin_49883619/article/details/109902127【张量的运算】

【4】https://blog.csdn.net/weixin_49883619/article/details/109889177【张量的运算】

【5】https://zhuanlan.zhihu.com/p/24798389 【Turker 分解  CP分解】

>>> tensor_1
tensor([[[[1., 1., 1.],
          [1., 1., 1.],
          [3., 3., 3.],
          [1., 1., 1.]],

         [[1., 1., 1.],
          [1., 1., 1.],
          [3., 3., 3.],
          [1., 1., 1.]],

         [[1., 1., 1.],
          [1., 1., 1.],
          [3., 3., 3.],
          [1., 1., 1.]]],


        [[[1., 1., 1.],
          [1., 1., 1.],
          [3., 3., 3.],
          [1., 1., 1.]],

         [[1., 1., 1.],
          [1., 1., 1.],
          [3., 3., 3.],
          [1., 1., 1.]],

         [[1., 1., 1.],
          [1., 1., 1.],
          [3., 3., 3.],
          [1., 1., 1.]]]])
>>> tensor
tensor([[[[1., 1., 1., 1.],
          [2., 2., 2., 2.],
          [1., 1., 1., 1.]],

         [[1., 1., 1., 1.],
          [2., 2., 2., 2.],
          [1., 1., 1., 1.]],

         [[1., 1., 1., 1.],
          [2., 2., 2., 2.],
          [1., 1., 1., 1.]]],


        [[[1., 1., 1., 1.],
          [2., 2., 2., 2.],
          [1., 1., 1., 1.]],

         [[1., 1., 1., 1.],
          [2., 2., 2., 2.],
          [1., 1., 1., 1.]],

         [[1., 1., 1., 1.],
          [2., 2., 2., 2.],
          [1., 1., 1., 1.]]]])
>>> tensor.shape
torch.Size([2, 3, 3, 4])
>>> tensor_1.shape
torch.Size([2, 3, 4, 3])
>>> tensor.matmul(tensor_1)
tensor([[[[ 6.,  6.,  6.],
          [12., 12., 12.],
          [ 6.,  6.,  6.]],

         [[ 6.,  6.,  6.],
          [12., 12., 12.],
          [ 6.,  6.,  6.]],

         [[ 6.,  6.,  6.],
          [12., 12., 12.],
          [ 6.,  6.,  6.]]],


        [[[ 6.,  6.,  6.],
          [12., 12., 12.],
          [ 6.,  6.,  6.]],

         [[ 6.,  6.,  6.],
          [12., 12., 12.],
          [ 6.,  6.,  6.]],

         [[ 6.,  6.,  6.],
          [12., 12., 12.],
          [ 6.,  6.,  6.]]]])

>>> g = tensor.matmul(tensor_1)
>>> g.shape
torch.Size([2, 3, 3, 3])

第三个链接中的张量的扩展~

å¨è¿éæå¥å¾çæè¿°

知乎中的Turker 分解图

å¨è¿éæå¥å¾çæè¿°

上面这张图其实会经常出现在论文里

链接4 已给出一个按照mode-1 unfolding 的解法,当然也可以按照mode-2,mode-3进行分解,但是需要记住最后恢复成张量形状时,维度需要调换一下(先把张量变成一个矩阵,然后与矩阵相乘,将结果按照之前的展开方式再还原回去。)

å¨è¿éæå¥å¾çæè¿°å¨è¿éæå¥å¾çæè¿°

(按照mode-1将T 张量 进行展开成矩阵形式)

å¨è¿éæå¥å¾çæè¿°

猜测一下最后一个链接的一个公式:应该就是按照上面的标记 X1代表是在mode-1 unfolding ( 记住mode1不动,mode2 是第二个维度与第一个维度换一下位置,mode3 是第三个位置与第一个位置换一下,这样才能恢复到原先刚分解时的张量的老亚子...

例如(1,2,3,4)不动,(2,1,3,4)第二个与第一个换....

公式是从左到右,计算是从右拨到左,而且每一个符号算完都得恢复成一个张量形状继续第二个符号。)

W V U G ->   UG : n1×r1 乘 r1×(r2×r3) =》转换回张量维度:n1×r2×r3. 

V U G : n2×r2 乘r2×(n1×r3)=》转换回张量维度:n1×n2×r3.

W V U G :n3×r3 乘r3×(n1×n2)=》转换回张量维度:n1×n2×n3

针对稀疏的张量,这样分解,可以节省空间。

另一个常见的CP张量分解的示意图:(Low-Rank Tensor Networks for Dimensionality Reduction and Large-Scale Optimization Problems: Perspectives and Challenges PART 1)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值