TensorFlow, numpy中的broadcast机制
2017-09-19 20:06
141 查看
numpy 有 broadcast 机制,使用它可以让我们的代码更加方便。
TensorFlow 有不少操作支持 broadcast.
通常来说,我们对 numpy 的 ndarray 或者 TensorFlow 中的 tensor 进行 element-wise 操作都要求两个变量的
shape 保持一直。
ValueError Traceback (most recent call last)
in ()
—-> 1 c = a + b
ValueError: operands could not be broadcast together with shapes (3,4) (4,4)
对两个arrays / tensors 只有两种情况 element-wise 的操作是可行的:
1. 他们的 shape 一样
2. 其中有个一个 shape 为 1
下面看一些例子:
a 是一个 shape 为 (4, 1) 的列向量, b 的 shape 为 (1, 5)。
当执行加法的时候,结果的 shape 是 (4 ,5)。
broadcast 机制会把 a 的列“自动复制” 5 次,b 的行“自动复制” 4 次, 然后进行相加。
另外 Adrew Ng 在 deeplearning.ai 中的课程提到的变成技巧,谨慎处理 shape 为 (n, ) 的 array,因为它们既不是行向量也不是列向量。
结果并不是之前预测的 (5, 5) 的 shape
我们把 d reshape 为 (5, 1) 后,结果就正常了。
参考资料:numpy broadcasting
TensorFlow 有不少操作支持 broadcast.
通常来说,我们对 numpy 的 ndarray 或者 TensorFlow 中的 tensor 进行 element-wise 操作都要求两个变量的
shape 保持一直。
a = np.random.rand(3, 4) b = np.random.rand(5, 4) c = a + b
ValueError Traceback (most recent call last)
in ()
—-> 1 c = a + b
ValueError: operands could not be broadcast together with shapes (3,4) (4,4)
对两个arrays / tensors 只有两种情况 element-wise 的操作是可行的:
1. 他们的 shape 一样
2. 其中有个一个 shape 为 1
下面看一些例子:
>>> a = np.random.randint(1, 10, [4, 1]) >>> b = np.random.randint(1, 10, [1, 5]) >>> a array([[4], [9], [5], [9]]) >>> b array([[7, 4, 5, 3, 6]]) >>> c = a + b >>> c.shape (4, 5) >>> c array([[11, 8, 9, 7, 10], [16, 13, 14, 12, 15], [12, 9, 10, 8, 11], [16, 13, 14, 12, 15]]) >>>
a 是一个 shape 为 (4, 1) 的列向量, b 的 shape 为 (1, 5)。
当执行加法的时候,结果的 shape 是 (4 ,5)。
broadcast 机制会把 a 的列“自动复制” 5 次,b 的行“自动复制” 4 次, 然后进行相加。
另外 Adrew Ng 在 deeplearning.ai 中的课程提到的变成技巧,谨慎处理 shape 为 (n, ) 的 array,因为它们既不是行向量也不是列向量。
>>> d = np.random.randn(5) >>> d array([-0.47976907, 0.1914602 , 0.26772239, -0.17560298, 1.13600281]) >>> d.shape (5,) >>> d.T array([-0.47976907, 0.1914602 , 0.26772239, -0.17560298, 1.13600281]) >>> d.T + d array([-0.95953815, 0.38292039, 0.53544479, -0.35120595, 2.27200562])
结果并不是之前预测的 (5, 5) 的 shape
>>> d1 = d.reshape(5, 1) >>> d1 + d1.T array([[-0.95953815, -0.28830888, -0.21204668, -0.65537205, 0.65623374], [-0.28830888, 0.38292039, 0.45918259, 0.01585722, 1.32746301], [-0.21204668, 0.45918259, 0.53544479, 0.09211942, 1.4037252 ], [-0.65537205, 0.01585722, 0.09211942, -0.35120595, 0.96039983], [ 0.65623374, 1.32746301, 1.4037252 , 0.96039983, 2.27200562]])
我们把 d reshape 为 (5, 1) 后,结果就正常了。
参考资料:numpy broadcasting
相关文章推荐
- numpy的广播机制(broadcast)
- Broadcast机制(转载)
- TensorFlow引入了动态图机制Eager Execution
- 第一行代码笔记 广播机制 broadcast
- Tensorflow之会话机制
- 【Android】广播机制 Broadcast
- numpy中的广播(broadcast)
- 广播(Broadcast内部机制讲解)
- [Android5.1]Broadcast机制
- android之如何在两个activity之间传递handler_利用broadcast广播机制
- Android Broadcast------详解广播机制
- android 基础学习(5)-----Android Broadcast机制
- LocalBroadcastManager原理和机制
- Android开发学习总结(1.21-广播机制Broadcast)
- Broadcast 广播机制总结
- Android系统中的广播(Broadcast)机制简要介绍和学习计划
- 第42课: Spark Broadcast内幕解密:Broadcast运行机制彻底解密、Broadcast源码解析、Broadcast最佳实践
- Android系统中的广播(Broadcast)机制简要介绍和学习计划 .
- Android源码解析之广播(Broadcast)机制简要介绍和学习计划
- Broadcast机制