我想你一定是误读了《力学 101》教程——或者你能指出具体的一行吗?
一般来说,对于网络层,我认为输入“流经”权重。为了代表这一点,我写tf.matmul(Inputs, Weights)
产生该层的输出。该输出可能会有偏差b
添加到其中,并将结果输入到非线性函数(例如 relu)中,然后输入到另一个函数中tf.matmul
作为下一层的输入。
其次,请记住,可以调整权重矩阵的大小以产生多个输出。这就是为什么它是一个矩阵,而不仅仅是一个向量。例如,如果您想要两个隐藏单元并且有五个输入特征,则可以使用形状[5, 2]
权重矩阵,如下所示(为了便于说明,在 numpy 中显示 - 您可以在张量流中执行相同的操作):
import numpy as np
a = np.array([1, 2, 3, 4, 5])
W = np.array([[.5, .6], [.7, .8], [.9, .1], [.2, .3], [.4, .5]])
>>> np.dot(a, W)
array([ 7.4, 6.2])
这有一个很好的行为,如果您添加一个批量维度a
,它仍然有效:
a = np.array[[1, 2, 3, 4, 5],
[6,7,8,9,0]]
>>> np.dot(a, W)
array([[ 7.4, 6.2],
[ 20.9, 17.7]])
当您使用 tf.matmul 从输入特征到隐藏单元,或从一层隐藏单元到另一层时,这正是您正在做的事情。