numpy与tensorflow中的广播(broadcast)机制
项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步
1.numpy中的广播
广播(broadcast)是numpy中经常使用的一个技能点,他能够对不同形状的数组进行各种方式的计算。
举个简单的例子:
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = a + b
此时c的结果为[5, 7, 9]。一般情况下要进行a+b的操作,需要a.shape=b.shape。比如上面的例子中,a、b的shape均为(3,),(3,)表示一维数组,数组中有3个元素。
很多情况下,维度不同的两个数组也能进行类似的操作,这里头的原理就是会自动出发广播机制。
a = np.array([[0, 0, 0],[1, 1, 1],[2, 2, 2],[3, 3, 3]])
b = np.array([1, 2, 3])
print(a.shape)
print(b.shape)
print(a + b)
结果为
(4, 3)
(3,)
[[1 2 3][2 3 4][3 4 5][4 5 6]]
[[1 2 3][2 3 4][3 4 5][4 5 6]]
a是一个4*3的二维数组,b是一个(3,)的一维数组。相当于将b在行的维度上扩充四倍进行运算。
此时a+b
等价于a + np.tile(b, [4, 1])
如果是a + np.tile(b, [5, 1])
,此时代码会报错,提示维度不匹配。
ValueError: operands could not be broadcast together with shapes (4,3) (5,3)
2.tensorflow中的广播
tensorflow中的广播机制与numpy类似。
同样看一个例子
def broadcast():a = tf.constant([[1, 2], [3, 4]])b = tf.constant([[1], [2]])c = a + bd = a + tf.tile(b, [1, 2])with tf.Session() as sess:cc, dd = sess.run([c, d])print(cc)print(dd)
输出的结果为
[[2 3][5 6]]
[[2 3][5 6]]
可见此时a + b
与a + tf.tile(b, [1, 2])
的效果是一样的。
3.广播的优点
广播机制允许我们在隐式情况下进行填充(tile),而这可以使得我们的代码更加简洁,并且更有效率地利用内存,因为我们不需要另外储存填充操作的结果。一个可以表现这个优势的应用场景就是在结合具有不同长度的特征向量的时候。为了拼接具有不同长度的特征向量,我们一般都先填充输入向量,拼接这个结果然后进行之后的一系列非线性操作等。这是一大类神经网络架构的共同套路(common pattern)。
a = tf.random_uniform([5, 3, 5])
b = tf.random_uniform([5, 1, 6])# concat a and b and apply nonlinearity
tiled_b = tf.tile(b, [1, 3, 1])
c = tf.concat([a, tiled_b], 2)
d = tf.layers.dense(c, 10, activation=tf.nn.relu)
但是这个可以通过广播机制更有效地完成。我们利用事实f(m(x+y))=f(mx+my),简化我们的填充操作。因此,我们可以分离地进行这个线性操作,利用广播机制隐式地完成拼接操作。
pa = tf.layers.dense(a, 10, activation=None)
pb = tf.layers.dense(b, 10, activation=None)
d = tf.nn.relu(pa + pb)
numpy与tensorflow中的广播(broadcast)机制相关推荐
- Android中的广播Broadcast详解
今天来看一下Android中的广播机制,我们知道广播Broadcast是Android中的四大组件之一,可见他的重要性了,当然它的用途也很大的,比如一些系统的广播:电量低.开机.锁屏等一些操作都会发送 ...
- numpy 和tensorflow中argmax(),argmin()函数使用讲解
在使用argmax()函数时,比如在深度学习里面计算acc经常要用到这个参数,这个参数返回的是沿轴axis最大值的索引值,对于,tensorflow和numpy用法是一样的,此处我就用numpy来举例 ...
- numpy 和tensorflow 中的乘法
矩阵乘法:tf.matmul() np.dot() ,@ 逐元素乘法:tf.multiply() np.multiply() 转载于:https://www.cnblogs.com/lizhiq ...
- 快速掌握TensorFlow中张量运算的广播机制
相信大家在使用numpy和tensorflow的时候都会遇到如下的错误 ValueError: operands could not be broadcast together with shapes ...
- 品茗论道说广播(Broadcast内部机制讲解)
1 概述 我们在编写Android程序时,常常会用到广播(Broadcast)机制.从易用性的角度来说,使用广播是非常简单的.不过,这个不是本文关心的重点,我们希望探索得再深入一点儿.我想,许多人也不 ...
- NumPy 广播(Broadcast)与pandas基础知识
文章目录 NumPy 广播(Broadcast) 控制遍历顺序 修改数组中元素的值 使用外部循环 广播迭代 Numpy 数组操作 修改数组形状 umpy.ndarray.flat umpy.ndarr ...
- 品茗论道说广播(Broadcast内部机制讲解)(上)
品茗论道说广播(Broadcast内部机制讲解)(上) 侯 亮 1 概述 我们在编写Android程序时,常常会用到广播(Broadcast)机制.从易用性的角度来说,使用广播是非常简单的.不过,这个 ...
- Numpy中的广播和数组运算
https://www.toutiao.com/a6677441250955624973/ 一.概述 在Numpy中当数组进行运算时,如果两个数组的形状相同,那么两个数组相乘就是两个数组的对应位相乘, ...
- 【深度学习】(8) CNN中的通道注意力机制(SEnet、ECAnet),附Tensorflow完整代码
各位同学好,今天和大家分享一下attention注意力机制在CNN卷积神经网络中的应用,重点介绍三种注意力机制,及其代码复现. 在我之前的神经网络专栏的文章中也使用到过注意力机制,比如在MobileN ...
- Android中使用广播机制退出多个Activity
谷歌百度一下,Android中退出多个Activity的方法,大家讨论的很多. 在实习的时候,看到公司的项目退出多个Activity,是采用LinkedList方法,毕业设计的时候,也参照了那种方法. ...
最新文章
- 面试官不会告诉你的16问 Java基础面试题
- 小程序网络最大并发限制解决思路
- java类的对象无参与有参_java无参与有参以及setter和getter方法(了解)
- XamarinForms教程构建XamarinForms开发环境
- 修改Eclipse中项目在Apache Tomcat中的部署路径
- 8个容易被忽略但不能忽略的SD-WAN功能-Vecloud
- 【转载】PHP面向对象(OOP)编程入门教程
- 【NLP】一份相当全面的BERT模型精讲
- 【数据结构与算法】之深入解析“买卖股票的最好时机III”的求解思路与算法示例
- Css 特殊或不常用属性
- windows service 2008 内存吃尽解决方案
- 案例:Oracle 11g RAC 数据库连接数过高处理办法
- Android 系统(222)---Android 的lowmemorykiller机制
- jquery 下拉选择框/复选框常用操作
- SharedObject实例.
- Fusion-IO:应用应为闪存优化
- MFC操作Access数据库
- Visual Studio 2015 中文社区版下载
- hp 计算机如何显示在桌面上,HPDL1414 精致桌面小伴侣 显示时间日历和电脑状态(CPU温度负载...
- Python数据分析案例-消费者用户画像