发新帖

tensorflow变量使用问题

[复制链接]
368 3

快来加入 TensorFlowers 大家庭!

您需要 登录 才可以下载或查看,没有帐号?加入社区

x
在tensorfow里用get_variable声明两一个tensor并提供初始值,我想在第二次用sess.run的时候声明的tensor的值是上一次计算出来的值而不是初始值,请问怎么实现?如下是我的几行测试代码:
   
import tensorflow as tf

a=tf.placeholder(tf.float32,[1,2])
b = tf.get_variable(name="a", shape=[1,2], initializer=tf.ones_initializer(),trainable=False)
b =tf.subtract(a,b)


with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(2):

    bb=sess.run(,feed_dict={a:[[1.0,2.0]]})
    print(bb)
    for j in tf.global_variables():
        print(sess.run(j))
        print(j.name)



代码中我希望j第二次的值不再是初始值怎么解决?求解答!!!

yunhai_luo已获得悬赏 10 金币+5 金币

最佳答案

你第一个sess.run[/backcolor]缺参数,我假定你是要看b。这里的关键问题在于b =tf.subtract(a,b)[/backcolor] 并不能改变b所指向的名为a的变量。这行代码的结果是b从指向的名为a的变量变成了指向a-b后的张量。改变tf ...
本楼点评(0) 收起

精彩评论3

yunhai_luo  TF豆豆  发表于 2018-4-19 11:00:40 | 显示全部楼层
你第一个sess.run缺参数,我假定你是要看b。这里的关键问题在于b =tf.subtract(a,b)
并不能改变b所指向的名为a的变量。这行代码的结果是b从指向的名为a的变量变成了指向a-b后的张量。改变tf.Variable需要用tf.assign。

首先解释你的结果:
  1. [[0. 1.]] # 这是a-b后的张量值b
  2. [[1. 1.]] # 这是变量"a"的值(也就是初始值),变量"a"不会发生改变
  3. a:0
  4. [[0. 1.]] # 这次循环a被feed_dict重新赋值,而变量"a"的值保持不变。这是a-b后的张量值b。
  5. [[1. 1.]] # 这是变量"a"的值(也就是初始值),变量"a"不会发生改变
  6. a:0
复制代码

你可以看出来,代码里的命名有点儿混乱。我重新命名一下:
  1. import tensorflow as tf

  2. f_in = tf.placeholder(tf.float32,[1,2])
  3. a_var = tf.get_variable(name="a", shape=[1,2], initializer=tf.ones_initializer(),trainable=False)
  4. sub_t = tf.assign(a_var, tf.subtract(f_in, a_var))

  5. with tf.Session() as sess:
  6.     tf.summary.FileWriter('.', sess.graph)
  7.     sess.run(tf.global_variables_initializer())
  8.     for i in range(2):
  9.         sub_t_res = sess.run(sub_t, feed_dict={f_in:[[1.0,2.0]]})
  10.         print(sub_t_res)
  11.         for j in tf.global_variables():
  12.             print(sess.run(j))
  13.             print(j.name)
复制代码
这样得到结果:
  1. [[0. 1.]] # 这是f_in-a_var后的张量值sub_t
  2. [[0. 1.]] # 这是变量"a"的值,从初始值[[1. 1.]]变为了[[0. 1.]],但是这次sess.run不会改变变量"a"的值
  3. a:0
  4. [[1. 1.]] # 这是f_in-a_var后的张量值sub_t,注意这里的a_var还是[[0. 1.]]
  5. [[1. 1.]] # 这是变量"a"的值,从初始值[[0. 1.]]变为了[[1. 1.]]
  6. a:0
复制代码

其中sess.run(j)只是取变量"a"的值,不需要计算sub_t,而且也不需要给f_in提供feed_dict。
本楼点评(0) 收起
M丶Sulayman  TF豆豆  发表于 2018-4-19 13:01:25 | 显示全部楼层
yunhai_luo 发表于 2018-4-19 11:00
你第一个sess.run缺参数,我假定你是要看b。这里的关键问题在于b =tf.subtract(a,b)[/backcolo ...

学到了,666,不错不错
本楼点评(0) 收起
neverchange  TF豆豆  发表于 2018-7-3 17:15:09 | 显示全部楼层
沙发分析的很详细,不过我觉得你需要去看看文档,可以系统的学习一下
本楼点评(0) 收起
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

快速回复 返回顶部 返回列表