TensorFlow中相同输入下y_pred是否使用更新后权重的咨询
关于TensorFlow线性回归中权重状态的问题解答
嘿,这个问题问到点子上了,刚好涉及TensorFlow里变量状态管理的核心逻辑,我来给你掰扯清楚:
首先得明确:TensorFlow里的变量(比如你用tf.layers.Dense创建的权重和偏置)状态是保存在Session实例里的,它的取值会随着你执行的操作动态变化,不是固定不变的。
针对你的问题,分两种情况来看:
如果在
sess.run(init)之后,你没有执行任何更新变量的操作:
这时候不管你运行多少次y_pred,用的都是初始化时的权重。毕竟init就是把变量设置成初始随机值(或者你指定的初始值),没做任何改动的话,变量状态自然不会变。如果在
init之后,你运行了训练相关的操作(比如优化器的minimize操作):
比如你补全代码后会有类似这样的逻辑:loss = tf.losses.mean_squared_error(y_true, y_pred) optimizer = tf.train.GradientDescentOptimizer(0.01) train_op = optimizer.minimize(loss) # 运行训练步骤,更新权重 sess.run(train_op, feed_dict={x: [[2.0]], y_true: [[-1.0]]})这时候每次运行
train_op,都会根据loss反向更新linear_model里的权重。之后再运行y_pred,用的就是更新后的权重了。
额外补充两个关键点:
- 只要你的
Session没有关闭,变量的状态就会一直保留。比如你训练了10轮,权重更新了10次,之后再跑y_pred,用的就是第10轮更新后的结果。 - 如果你想回到初始权重,必须重新执行
sess.run(init),这会把所有变量重置回初始化状态。
举个直观的小例子:
# 初始化后第一次跑y_pred initial_pred = sess.run(y_pred, feed_dict={x: [[1.0]]}) print(initial_pred) # 输出是随机的初始值,比如大概[[0.23]] # 跑一次训练 sess.run(train_op, feed_dict={x: [[1.0]], y_true: [[0.0]]}) # 再跑y_pred updated_pred = sess.run(y_pred, feed_dict={x: [[1.0]]}) print(updated_pred) # 输出会更接近目标值0.0,比如[[0.19]]
内容的提问来源于stack exchange,提问作者pasternak
相关产品推荐
相关产品推荐

