我已经学习了ML并且已经从Andrew N.G的课程中学习DL,每次他谈到线性分类器时,权重只是一维向量。 即使在分配期间,当我们将图像滚动到1-D向量(像素* 3)时,权重仍然是1-D向量。
我现在已经开始了O'Reilly的“Learning TensorFlow”一书,并且遇到了第一个例子。张量流中的权重初始化略有不同。
这本书说明如下(第14页):
“由于我们此时不打算使用空间信息,我们将图像像素展开为一个表示为x的单个长向量(图2-2)。 $ xw ^ 0 =Σx_iw^ 0_i $ 将成为包含数字0的图像的证据(同样地,我们将为每个其他数字设置$ w ^ d $权重向量,d = 1,...,9)。“
和相应的TensorFlow代码:
data = input_data.read_data_sets(DATA_DIR, one_hot=True)
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
y_true = tf.placeholder(tf.float32, [None, 10])
y_pred = tf.matmul(x, W)
为什么权重2-D在这里。 softmax线性分类器中的权重2-D? 在课程中,当他教授Softmax线性分类器时,他仍然说权重是1-D。谁能解释一下呢?
答案 0 :(得分:1)
是的,你说权重是1-D,但这只适用于1个神经元。 如果你考虑一个简单的分层神经网络,它将有一些层(你的代码只有1层,10个神经元)。因此,在张量流中,权重变量包含整个层的权重而不是单个神经元,这使得它成为二维数组。
W = tf.Variable(tf.zeros([784, 10]))
这一行意味着有10个神经元,每个神经元的重量数组长度为784。 在张量流中理解这一点的一条经验法则是权重维度被写为......
W = tf.Variable(tf.zeros([output_of_previous_layer, output_of_current_layer]))
或
W = tf.Variable(tf.zeros([input_of_current_layer, input_of_next_layer]))
您可以在documentation
了解详情