广播机制的维度问题

广播机制的维度问题

从线性回归中的广播机制谈起

训练集:样本x(sample)-特征w(feature)
预测目标(target):标签(label)

y ^ = X w + b \hat{\mathbf{y}}=\mathbf{X}\mathbf{w}+b y^=Xw+b使用广播机制

b是一个数,这里可以用广播机制,是因为对于每一个样本,要拟合的特征和偏置都是相同的。广播机制可以让形状不同的张量进行运算,只要它们在某些维度上是兼容的。在这个例子中,偏置是一个标量,它可以和任何形状的张量相加,相当于把偏置复制成和另一个张量相同的形状,然后再相加。这样可以减少内存和计算开销。控制神经元的激活阈值,使得神经元对输入的响应更灵活。

numpy数组shape的表示是用元组来表示的,元组只有一个元素时就是要多加一个逗号。与整数区分:(3,) 是一个一维数组,但它不是一个普通的一维数组,而是一个特殊的一维数组,叫做单元素数组。单元素数组是指只有一个元素的数组,它的形状是 (1,),而不是 (1)。这是因为,在 numpy 中,数组的形状是一个元组,元组中的每个元素表示数组在对应维度上的长度。例如,(2, 3) 表示一个二维数组,有 2 行 3 列;(4,) 表示一个一维数组,有 4 个元素。而 (1) 不是一个元组,而是一个整数,shape为(),不能表示数组的形状。(,3)和(3,2,)都不是有效的数组形状表达方式。

广播机制是 numpy 对不同形状的数组进行数值计算的方式,它可以让形状不同的数组在某些维度上兼容,从而进行运算。广播机制的原则是:

  • 如果两个数组的后缘维度(从末尾开始算起的维度)的轴长度相符,或其中的一方的长度为 1,则认为它们是广播兼容的。
  • 广播会在缺失和(或)长度为 1 的维度上进行。
  • 输出数组的形状是输入数组形状的各个维度上的最大值。

总的来说,广播机制就是首先看后缘维度(shape从后往前数那几个数字,从右到左,进行匹配)是否相同,相同则可以扩展,无论维度数相差多少都可以扩展,且可扩展的地方就只有维度长度为1的地方。后缘维度相同包括完全相同:

  • (1,2)
  • (4,3,1,2)

和不同长度位上任意一方含有1,1是个万金油O型血,代表可以扩展替代

  • (2,2)
  • (3,1,2)

不相同:

  • (2,2)
  • (3,3,2)

如果维度数不同,就先在维度数小的那个数组前面加1.比如:

  • (1,2)——>(1,1,1,2)
  • (4,3,1,2)——>(4,3,1,2)

然后相互把长度为1的轴扩展为对方的长度:

  • (1,1,1,2)——>(4,3,1,2)
  • (4,3,1,2)——>(4,3,1,2)

又如:

  • (3,1,2)——>(3,2,2)
  • (1,2,1)——>(3,2,2)

或者缺失的数字a(shape为() 0维数组):

  • ()——>(1,2,1)
  • (1,2,1)——>(1,2,1)

扩展的方法很简单,就是把长度为1轴(意味着只包含一个低维数据)的内层更低维的数据进行复制到对方相同的长度。从内到外和从外到内均可,因为都满足内层复制的规则,结果都一样。

这一规则可以扩展到多个数组同时进行广播

import numpy as np 
a = np.arange(6).reshape((3,1,2)) [[[0 1]] [[2 3]] [[4 5]]] 
#shape (3, 1, 2) 
b = np.arange(2).reshape((1,2,1)) [[[0] [1]]] 
#shape (1,2,1) 
d = np.arange(8).reshape((2,1,2,2)) print(a,' ',b) print(np.shape(a),' ',np.shape((b))) 
c=a+b+d print(c,np.shape(c)) 
[[[[ 0 2] [ 3 5]] 
[[ 2 4] [ 5 7]] 
[[ 4 6] [ 7 9]]] 

[[[ 4 6] [ 7 9]] 
[[ 6 8] [ 9 11]] 
[[ 8 10] [11 13]]]] 
#shape (2, 3, 2, 2)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值