PyTorch教程(五):Broadcasting

Broadcasting可以自动进行维度的扩展,而且不需要拷贝数据。

例如:

import torch

a = torch.rand(3,4)
# tensor([[0.0422, 0.9152, 0.5486, 0.8753],
#        [0.3918, 0.6056, 0.0634, 0.9498],
#        [0.4444, 0.2209, 0.8165, 0.1533]])
b = torch.rand(4)
# tensor([0.4145, 0.2913, 0.1655, 0.3705])
a + b
# tensor([[0.4567, 1.2065, 0.7141, 1.2458],
#        [0.8064, 0.8969, 0.2289, 1.3203],
#        [0.8589, 0.5122, 0.9819, 0.5238]])

上面的例子可以看到,虽然a和b的shape不同,但是依然可以进行相加操作,原因就是PyTorch自动做了Broadcasting。但不是任何两个tensor都可以进行Broadcasting。

如果两个Tensor是broadcastable的,那么就可以对他俩使用支持broadcast的运算,比如直接加减乘除

而两个向量要是broadcast的话,必须满足以下两个条件:

  • 每个tensor至少是一维的
  • 两个tensor的维数从后往前,对应的位置要么是相等的,要么其中一个是1,或者不存在
>>> x=torch.empty(5,7,3)
>>> y=torch.empty(5,7,3)
# 相同维数的tensor一定是broadcastable的

>>> x=torch.empty((0,))
>>> y=torch.empty(2,2)
# 不是broadcastable的,因为每个tensor维数至少要是1

>>> x=torch.empty(5,3,4,1)
>>> y=torch.empty(  3,1,1)
# 是broadcastable的,因为从后往前看,一定要注意是从后往前看!
# 第一个维度都是1,相等,满足第二个条件
# 第二个维度其中有一个是1,满足第二个条件
# 第三个维度都是3,相等,满足第二个条件
# 第四个维度其中有一个不存在,满足第二个条件

# 但是
>>> x=torch.empty(5,2,4,1)
>>> y=torch.empty(  3,1,1)
# 不是broadcastable的,因为从后往前看第三个维度是不match的 2!=3,且都不是1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值