不同阶的矩阵加法运算为啥成立了

请问一下,有同学知道图里面画圈那个b他是(11)的矩阵但是tf.matmul(x,w)是(21)的矩阵。他们为啥能做加法运算.

import tensorflow as tf

x  = [[1., 2., 3.], [3., 2., 1.]]
w = tf.Variable([[1],[2],[3]], dtype=tf.float32)
b = tf.Variable([3], dtype=tf.float32)

y = tf.matmul(x, w) + b
print(y)

img

他们为啥能做加法运算,是因为他们有啥特殊的地方吗?

相当于矩阵里面的所有数字都加上偏移量b,你看到的是1x1的,你可以理解成在运算的时候是扩展成和前面结果一样的矩阵相加(当然这是理论上这样,实际上底层的实现并不会有扩展这一个项目,都是直接加上去的)

这是numpy broadcasting rules。这里+b,实际上加的是[3,3]
https://numpy.org/doc/stable/user/basics.broadcasting.html

可以加
tf.matmul (a, b, transposeA, transposeB)
返回值:它返回两个矩阵的点积。
然后举个例子来说,就好比如一个变量a 加 常量1,那么能得到结果吗?这个时候,可能会想,不太可能,变量和常量怎么能相加求得结果呢,事实上,你给变量a一个值,比如1,那么1+1=2,这不就可以吗?而题中给f.matmul(x, w)的值是什么,x和w。