官方链接
tf.nn.xw_plus_b(
x,
weights,
biases,
name=None
)
主要的功能就是算X*W+b这个函数
- x:输入的矩阵,一般是网络结构上一层的输出,维度为[batch_size, in_units]表示输入的样本数*每个样本用多少个单元表示
- weights: x的权重矩阵,一般都是可训练的。维度为[in_units, out_units]。注意的是第一个维度要和x的最后一个维度一样,因为需要和x进行矩阵相乘的计算
- biases:偏置。维度为一维,[out_units],注意和weights的最后一维一致,因为最终要加在XW的结果矩阵上。而X*W矩阵的维度为[batch_size, out_units]
该api等价于tf.matmul(X_inputs, weights) + Bias操作。下面的代码片段也验证了确实等价:
import tensorflow as tf
X_inputs = tf.constant(
value=[[1, 2, 3, 4, 5], [2, 3, 4, 5, 6], [3, 4, 5, 6, 7]], dtype=tf.float64,
shape=[3, 5])
weights = tf.constant(
value=[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],
[0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1],
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
[0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2]],
dtype=tf.float64,
shape=[5, 10])
Bias = tf.constant(value=[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],
dtype=tf.float64,
shape=[10])
logits1 = tf.nn.xw_plus_b(x=X_inputs, weights=weights, biases=Bias)
logits2 = tf.matmul(X_inputs, weights) + Bias
with tf.Session() as sess:
print('-------logits1------------')
print(sess.run(logits1))
print('-------logits2------------')
print(sess.run(logits2))
![26ef06423d3ce784feb7e9e0a5cbf2c9.png](https://i-blog.csdnimg.cn/blog_migrate/6e9f4ac705dc32c48b8f653e30ca9e54.jpeg)
计算过程比较简单这里不再赘述了。
想说说这个api的使用场景。其实这个api可以使用在很多地方,只要是有x*w+b的形式的都可以使用。主要是x的变化,可以是上一层网络的输出,可以是几层网络的拼接等等