我在尝试理解一个TensorFlow代码片段。我被教导的是,我们需要对所有传入的输入求和,然后将它们传递给激活函数。下图展示了一个单一神经元。请注意,我们计算输入的加权和,然后再计算激活函数。
在多层感知器的大多数示例中,他们没有包括求和步骤。这让我感到非常困惑。
这里是一个这样的代码片段的示例:
weights = { 'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])), 'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])), 'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes]))}biases = { 'b1': tf.Variable(tf.random_normal([n_hidden_1])), 'b2': tf.Variable(tf.random_normal([n_hidden_2])), 'out': tf.Variable(tf.random_normal([n_classes]))}# Create modeldef multilayer_perceptron(x): # Hidden fully connected layer with 256 neurons layer_1 = tf.nn.relu(tf.add(tf.matmul(x, weights['h1']), biases['b1'])) # Hidden fully connected layer with 256 neurons layer_2 = tf.nn.relu(tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])) # Output fully connected layer with a neuron for each class out_layer = tf.nn.relu(tf.matmul(layer_2, weights['out']) + biases['out']) return out_layer
在每一层中,我们首先将输入与weights
相乘。之后,我们加上bias
项。然后我们将这些传递给tf.nn.relu
。求和在哪里发生呢?看起来我们似乎跳过了这一步!
任何帮助都将非常有用!
回答:
tf.matmul运算符执行矩阵乘法,这意味着结果矩阵中的每个元素都是乘积的总和(这正是您描述的内容)。
以一个行向量和一个列向量的简单例子为例,如同您只有一个神经元和一个输入向量的情况(如您上面分享的图形所示);
x = [2,3,1]y = [3, 1, 2]
那么结果将是:
tf.matmul(x, y) = 2*3 + 3*1 +1*2 = 11
在这里您可以看到加权和。
附注:tf.multiply执行逐元素乘法,这不是我们在这里想要的。