TensorFlow 辨异 —— tf.add(a, b) 与 a+b(tf.assign 与 =)、tf.nn.bias_add 与 tf.add

1. tf.add(a, b) 与 a+b

在神经网络前向传播的过程中,经常可见如下两种形式的代码:

tf.add(tf.matmul(x, w), b)

tf.matmul(x, w) + b

简而言之,就是 tf.add(a, b) 与 a + b二者的区别,类似的也有,tf.assign 与 =(赋值运算符)的差异。

在计算精度上,二者并没有差别。运算符重载的形式a+b,会在内部转换为,a.__add__(b),而a.__add__(b)会再一次地映射为tf.add,在 math_ops.py中相关的映射如下:

_OverrideBinaryOperatorHelper(gen_math_ops.add,"add")


2. tf.nn.bias_add 与 tf.add

tf.nn.bias_add 是 tf.add 的一个特例,也即 tf.add 支持的操作比 tf.nn.bias_add 更多。二者均支持 broadcasting(广播机制),也即两个操作数最后一个维度保持一致。

除了支持最后一个维度保持一致的两个操作数相加外,tf.add 还支持第二个操作数是一维的情况。


输出结果:

bias_add:

[[ 2. 0.]

[ 3. 1.]

[ 4. 2.]]

add:

[[ 2. 2.]

[ 3. 3.]

[ 4. 4.]]


转载:

https://blog.csdn.net/lanchunhui/article/details/66477742

https://www.cnblogs.com/lovephysics/p/7222022.html

推荐阅读更多精彩内容