在tensorflow中使用更新的权重

时间:2018-04-02 07:28:43

标签: tensorflow linear-regression

我在tensorflow中尝试了一个示例。我的问题是,当我使用相同的初始特征x运行y_pred时,它是否使用前面for for循环中更新的权重,或者它只使用初始化权重。

#linear regression for y = -(x-1)
x = tf.placeholder(dtype=tf.float32,shape=(None,1))
y_true = tf.placeholder(dtype=tf.float32,shape=(None,1))

linear_model = tf.layers.Dense(units=1)
y_pred = linear_model(x)

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

loss = tf.losses.mean_squared_error(labels = y_true,predictions=y_pred)
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train = optimizer.minimize(loss)
for i in range(1000):
    _,loss_ = sess.run((train,loss),{x:[[0],[1],[2],[3]],y_true:[[1],[0],[-1],[-2]]})

print(sess.run(y_pred,{x:[[0],[1],[2],[3]]}))

我的困惑来自文档,当它说,计算它回溯的操作的输出。那么,要计算y_pred,它会回溯并初始化权重并使用x计算y_pred?或者它是否使用了Dense图层的已更新权重?

上述代码的输出是:

[[ 0.9960759 ]
 [-0.00208616]
 [-1.0002482 ]
 [-1.9984105 ]]

1 个答案:

答案 0 :(得分:0)

“文档说要计算它回溯的操作的输出” - >这意味着您选择一个节点(在您的情况下为y_pred)并按照依赖关系图直到您到达结尾。在这个回溯操作中没有时间概念,你只是在图中解析路径。

因此,当您运行(train,loss)时,您甚至可以使用此回溯算法来解决每个所需节点,以便对两个节点进行正确和并行评估。 特别是,train操作将解析为一组梯度计算并分配将被执行的操作,以便正确评估train节点。

执行assing节点将使网络参数更新。

因此,您将准确更新网络参数1000次。

在训练循环结束时,您将评估y_pred。对此节点的评估将回溯到所需的输入节点,它将使用更新的参数来计算正确的输出。