pytorch维度不同的张量(tensor)相加规则

网上没找到,也不知道哪里有“张量加法”的源代码,就自己试了一下,大概有下面的规律。

如果有错误,希望大家指正!

规律1:如果相加的两个张量维度不一致,那么首先把维度低的那个张量从右边和维度高的张量对齐

例如下面的代码,b的维度低一些,所以和a相加的时候b的维度就会先扩充为[1,1,5,6]。

a = torch.ones([8, 4, 5, 6])
print('a =',a.size())
b = torch.ones([5, 6])
print('b =',b.size())
c = a+b
print('c =',c.size())

对齐后就可以跳转到规律2了。

规律2:当两个张量维度相同时,对应轴的值需要一样,或者为1。

相加时,把所有为1的轴进行复制扩充,从而得到两个维度完全相同的张量。然后对应位置相加即可。

可以相加的例子

  1. 由于对应的每个轴要么相等,要么一方是1,因此可以相加。否则不可以相加。
a = torch.ones([8, 4, 5, 6])
b = torch.ones([1, 1, 5, 6])
c = a+b
  1. 一方维度全是1,可以相加
a = torch.ones([8, 4, 5, 6])
print('a =',a.size())
b = torch.ones([1, 1, 1, 1])
print('b =',b.size())
c = a+b
print('c =',c.size())
  1. 维度完全相等,可以相加
a = torch.ones([8, 4, 5, 6])
print('a =',a.size())
b = torch.ones([8, 4, 5, 6])
print('b =',b.size())
c = a+b
print('c =',c.size())

不可以相加的例子

  1. 由于4不等于2,因此不可以相加
a = torch.ones([8, 4, 5, 6])
print('a =',a.size())
b = torch.ones([1, 2, 1, 6])
print('b =',b.size())
c = a+b
print('c =',c.size())
  1. 由于3不等于6,不可以相加
a = torch.ones([8, 4, 5, 6])
print('a =',a.size())
b = torch.ones([1, 4, 1, 3])
print('b =',b.size())
c = a+b
print('c =',c.size())
  • 46
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值