为什么这个TensorFlow示例在激活函数之前没有求和?

我在尝试理解一个TensorFlow代码片段。我被教导的是,我们需要对所有传入的输入求和,然后将它们传递给激活函数。下图展示了一个单一神经元。请注意,我们计算输入的加权和,然后再计算激活函数。

picture

在多层感知器的大多数示例中,他们没有包括求和步骤。这让我感到非常困惑。

这里是一个这样的代码片段的示例:

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执行逐元素乘法,这不是我们在这里想要的。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注