我对tf.matmul()
在TensorFlow中使用该函数感到有点困惑.不过,我的问题可能更多是关于深度学习的理论.假设你有一个输入X和权重矩阵W(假设零偏差),我想计算WX作为输出,可以通过tf.matmul(W, X)
.但是,在初学者的教程MNIST中,它是相反的,tf.matmul(X, W)
而是用来代替.在另一方面,在接下来的教程TensorFlow机械101,tf.matmul(W, X)
被使用.由于矩阵大小对于乘法很重要,我想知道是否有人可以澄清这个问题.
我认为你必须误读机制101教程 - 或者你能指出具体的路线吗?
一般来说,对于网络层,我认为输入"流过"权重.为了表示这一点,我编写tf.matmul(Inputs, Weights)
以生成该层的输出.然后,该输出可能会b
向其添加偏差,并将其结果输入非线性函数(如relu),然后输入另一个tf.matmul
作为下一层的输入.
其次,请记住可以调整权重矩阵的大小以产生多个输出.这就是为什么它是一个矩阵,而不仅仅是一个矢量.例如,如果你想要两个隐藏单位并且你有五个输入特征,你可以使用一个形状[5, 2]
权重矩阵,就像这样(为了便于说明而显示在numpy中 - 你可以在tensorflow中做同样的事情):
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从输入要素转到隐藏单位,或从隐藏单位的一层到另一层时所做的.