abo*_*ora 73 python variable-assignment neural-network deep-learning tensorflow
我试图在python中为tensorflow变量赋一个新值.
import tensorflow as tf
import numpy as np
x = tf.Variable(0)
init = tf.initialize_all_variables()
sess = tf.InteractiveSession()
sess.run(init)
print(x.eval())
x.assign(1)
print(x.eval())
Run Code Online (Sandbox Code Playgroud)
但我得到的输出是
0
0
Run Code Online (Sandbox Code Playgroud)
所以价值没有改变.我错过了什么?
mrr*_*rry 117
该声明x.assign(1)实际上并没有赋值1给x,而是创建了一个tf.Operation,你必须明确地运行更新变量*要在通话.Operation.run()或Session.run()可用于运行操作:
assign_op = x.assign(1)
sess.run(assign_op) # or `assign_op.op.run()`
print(x.eval())
# ==> 1
Run Code Online (Sandbox Code Playgroud)
(*实际上,它返回一个tf.Tensor,对应于变量的更新值,以便更容易链接赋值.)
Rob*_*nse 38
您也可以在tf.Variable不向图表添加操作的情况下为a分配新值:tf.Variable.load(value, session).此函数还可以在从图形外部指定值时保存添加占位符,并且在图形完成时非常有用.
import tensorflow as tf
x = tf.Variable(0)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
print(sess.run(x)) # Prints 0.
x.load(1, sess)
print(sess.run(x)) # Prints 1.
Run Code Online (Sandbox Code Playgroud)
Sal*_*ali 15
首先,您可以将值赋给变量/常量,只需将值输入到它们中,就像使用占位符一样.所以这是完全合法的:
import tensorflow as tf
x = tf.Variable(0)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print sess.run(x, feed_dict={x: 3})
Run Code Online (Sandbox Code Playgroud)
关于你与tf.assign()运算符的混淆.在TF中,在会话内部运行之前不会执行任何操作.所以你总是要做这样的事情:op_name = tf.some_function_that_create_op(params)然后在你运行的会话内sess.run(op_name).使用assign作为示例,您将执行以下操作:
import tensorflow as tf
x = tf.Variable(0)
y = tf.assign(x, 1)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print sess.run(x)
print sess.run(y)
print sess.run(x)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83536 次 |
| 最近记录: |