首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么我们需要在TensorFlow中使用"assign“?

为什么我们需要在TensorFlow中使用"assign“?
EN

Stack Overflow用户
提问于 2019-02-21 22:39:23
回答 3查看 115关注 0票数 4

我正在经历一个示例here。我看到了以下的操作顺序:

代码语言:javascript
复制
import tensorflow as tf

v1 = tf.get_variable("v1", shape=[3], initializer = tf.zeros_initializer)
inc_v1 = v1.assign(v1+1)
init_op = tf.global_variables_initializer()
s = tf.Session()
s.run(init_op)
s.run(inc_v1)

结果,我们得到了:

代码语言:javascript
复制
array([1., 1., 1.], dtype=float32)

我不明白"assign“操作背后的逻辑。特别是,我已经将其替换为在我看来简单得多的东西:

代码语言:javascript
复制
import tensorflow as tf

v1 = tf.get_variable("v1", shape=[3], initializer = tf.zeros_initializer)
inc_v1 = v1 + 1
init_op = tf.global_variables_initializer()
s = tf.Session()
s.run(init_op)
s.run(inc_v1)

我得到了完全相同的输出。那么,为什么我们需要赋值呢?

EN

回答 3

Stack Overflow用户

发布于 2019-02-21 23:02:40

它接受你的原始张量和一个新的张量,用一个新值更新你的张量的原始值,并返回你的原始张量的引用。看看Tensorboard上生成的图表:

操作assign返回对原始张量的引用:

如果没有assign,只需创建另一个张量来添加常量值:

如果打印张量v1的求值(在运行inc_v1之后),它会输出[1. 1. 1.],因为操作的结果是它被重新分配给了原始张量。在第二种情况下,它将保持为[0. 0. 0.]

票数 2
EN

Stack Overflow用户

发布于 2019-02-21 23:19:33

这个例子确实不是很有说明性。重要的是,assign将给定值保存到会话内的变量中,以便稍后在下一次调用run时使用它。请看这里:

代码语言:javascript
复制
import tensorflow as tf

v1 = tf.get_variable("v1", shape=[3], initializer = tf.zeros_initializer)
inc_v1 = v1.assign(v1+1)
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init_op)
    sess.run(inc_v1)
    print(sess.run(v1))
    # [1. 1. 1.]
    sess.run(inc_v1)
    print(sess.run(v1))
    # [2. 2. 2.]

v1保存了赋值,因此在进一步调用run时可以使用它。现在比较:

代码语言:javascript
复制
import tensorflow as tf

v1 = tf.get_variable("v1", shape=[3], initializer = tf.zeros_initializer)
inc_v1 = v1+1
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init_op)
    sess.run(inc_v1)
    print(sess.run(v1))
    # [0. 0. 0.]
    sess.run(inc_v1)
    print(sess.run(v1))
    # [0. 0. 0.]

在这里,递增发生在对run的一次调用中,但是它的结果从未保存在任何地方,并且v1仍然具有值[0. 0. 0.]

变量很重要,因为TensorFlow中的大多数事情都是在几个步骤中完成的,例如,神经网络中的每一批处理。每一步都是对run的调用,重要的是要保存一个步骤中对模型的更改(例如,对神经网络中权重的更新)以供下一步使用-否则您将在适当的位置运行,永远不会离开起点!

票数 2
EN

Stack Overflow用户

发布于 2019-02-21 22:56:58

如果要赋值的值不是来自图表,则需要赋值

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54809628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档