tensorflow中operation具体代表什么
tensorflow吧
全部回复
仅看楼主
level 2
a=tf.Variable(1.0,name="a")
b=tf.Variable(2.0,name="b")
c=tf.add(a,b,name="c")init=tf.variables_initializer([a,b])
with tf.Session() as sess
sess.run(init)
print(sess.run(c))
a=a+1
b=b+2
print(sess.run(c))
有没有哪位好心人解释一下为什么c的值是3而不是6,刚开始学tensorflow,不是很明白
2017年09月02日 08点09分 1
level 1
为什么
2018年05月11日 00点05分 2
level 7
是个好问题 待会试试看[阴险]
2018年05月12日 03点05分 3
level 8
是个好问题 待会试试看[阴险]
2018年05月12日 10点05分 4
level 7
我的理解是 session会话里的a=a+1 和b=b+1 并不在tf的计算图里,会话运行时只对计算图上的变量和表达式进行计算,所以这两个式子实际上没有参与计算
2018年05月12日 13点05分 5
level 7
可以认为这个a和b是计算图上的一个张量节点,而不是一个可以直接引用的变量,需要先用sess.run(a)来计算并获取它的取值才能引用
2018年05月12日 13点05分 6
level 7
做了个小实验,吧a = a+1改成a=sess。run(a)+1 结果a的类型由之前的计算图上一个张量节点变为现在的一个实数2.0,说明之前a是一个计算图上的张量节点,但是这里的a=sess。run(a)+1执行后,就是通过计算图计算返回张量a的值之后+1然后赋值给a,但是返回的是一个具体的数1+1=2,赋值给a后覆盖了原来a的定义(原来的a是一个张量节点而不是具体的值,这里就变成一个具体的值了)
2018年05月12日 13点05分 7
非常感谢[哈哈]
2019年04月05日 01点04分
level 9
session会话中节点没在图中那这个怎么解释
2018年05月13日 05点05分 8
我觉得是因为lz上面那个a=a+1没有向计算图添加节点,所以计算节点时就不会运算,而你这里是添加了一个节点
2018年05月13日 11点05分
这里tf.add应该是添加计算图上节点了 但是直接用+就没有添加 我是这样理解的
2018年05月13日 11点05分
回复 我比安娜可爱吧 :不是,我也试过不用tf.add(),直接用+结果是一样的。
2018年05月13日 12点05分
回复 不吃蛋黄儿🎓 :那就不知道了 我目前是这样理解的,
2018年05月13日 13点05分
level 9
2018年05月13日 12点05分 9
level 8
session会话中节点没在图中那这个怎么解释
2018年05月13日 15点05分 10
level 8
]做了个小实验,吧a = a+1改成a=sess。run(a)+1 结果a的类型由之前的计算图上一个张量节点变为现在的一个实数2.0,说明之前a是一个计算图上的张量节点,但是这里的a=sess。run(a)+1执行后,就是通过计算图计算返回张量a的值之后+1然后赋值给a,但是返回的是一个具体的数1+1=2,赋值给a后覆盖了原来a的定义(原来的a是一个张量节点而不是具体的值,这里就变成一个具体的值了)
2018年05月13日 15点05分 11
level 7
关于这个问题又有了一个新的理解,以下是个简单小实验和生成的计算图,下面简要说下自己的理解
2018年05月14日 03点05分 12
level 7
我的理解是,最初定义了a,b节点以及对a,b进行加法运算得到c节点的计算图,而在sess中又添加了一个对a操作+1的add节点,但是如图,这个节点对c不会产生影响,而b由于没有+1的add操作,它仍然表示计算图上最初的变量,但是a虽然之前也代表一个变量,由于进行了+1操作并且被赋值给同名的a,见代码截图输出行里的第三行(add:0),此时的a已经代表a=a+1这个add操作的输出节点(不在代表原来的变量a),而如果要对原来的变量a引用,就要sess.run(a/a)而不是sess.run(a),而至于为什么b是variable,b/b是tensor,这个还没有解释
2018年05月14日 03点05分 13
我认为a=a+1,并不是去更新原来变量a的值,而是新建了一个a+1的op,该节点的输出张量名叫a,或者说该节点叫a,它与初始的变量a同名,如果sess.run(a)他的结果不是1而是2
2018年05月14日 05点05分
回复 不吃蛋黄儿🎓 :差不多意思,就是在新建a+1这个操作op前,a是代表一个原来的变量,新建a+1后,a的定义就变成了a+1这个op的输出了,所以sess。run(a)就是+1这个操作的结果2了
2018年05月14日 05点05分
回复 不吃蛋黄儿🎓 :接下来就是具体b和b/b的区别又要作何理解,至少这两个属于不同类型
2018年05月14日 05点05分
回复 不吃蛋黄儿🎓 :原来的a的值没变,但是它已经不叫a了,,或者说直接sess。run(a)得到的已经不是原来的a了,这里用a/a才得到1
2018年05月14日 05点05分
1