当前位置:  开发笔记 > 编程语言 > 正文

如何为TensorFlow变量赋值?

如何解决《如何为TensorFlow变量赋值?》经验,为你挑选了3个好方法。

我试图在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())

但我得到的输出是

0
0

所以价值没有改变.我错过了什么?



1> mrry..:

该声明x.assign(1)实际上并没有赋值1x,而是创建了一个tf.Operation,你必须明确地运行更新变量*要在通话.Operation.run()Session.run()可用于运行操作:

assign_op = x.assign(1)
sess.run(assign_op)  # or `assign_op.op.run()`
print(x.eval())
# ==> 1

(*实际上,它返回一个tf.Tensor,对应于变量的更新值,以便更容易链接赋值.)


`assign()`的当前实现会覆盖现有值.
你不知道这对我有多大帮助!:)

2> Robin Dinse..:

您也可以在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.


一个被低估的解决方案 - "load"避免了这么多的样板.
警告:你不能用不同于变量初始值形状的数组加载它!

3> Salvador Dal..:

首先,您可以将值赋给变量/常量,只需将值输入到它们中,就像使用占位符一样.所以这是完全合法的:

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})

关于你与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)


请注意,通过`feed_dict`提供值不会将该值永久分配给变量,而只会针对该特定的运行调用.
推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有