tensorflow符号主义的计算首先定义各种变量,然后建立一个“计算图”,计算图规定了各个变量之间的计算关系。
代码:
import tensorflow as tf
var1 = tf.Variable(0) # our first variable in the "global_variable" set
add1 = tf.add(var1, 1)
# 不assign是不会更新的
update_operation1 = tf.assign(var1, add1)
var2 = tf.Variable(0)
add2 = tf.add(var1,var2)
update_operation2 = tf.assign(var2, add2)
with tf.Session() as sess:
# once define variables, you have to initialize them by doing this
sess.run(tf.global_variables_initializer())
for _ in range(3):
# run 若以tuple的形式,则两者之间没有顺序,并发执行
result = sess.run((update_operation1,update_operation2))
print(result)
with tf.Session() as sess:
# once define variables, you have to initialize them by doing this
sess.run(tf.global_variables_initializer())
for _ in range(3):
# run 先执行update_operation1,后执行update_operation2
result1 = sess.run(update_operation1)
result2 = sess.run(update_operation2)
print(result1,result2)
with tf.Session() as sess:
# once define variables, you have to initialize them by doing this
sess.run(tf.global_variables_initializer())
for _ in range(3):
# run 先执行update_operation1,后执行update_operation2
result = sess.run(update_operation1)
print(result)
with tf.Session() as sess:
# once define variables, you have to initialize them by doing this
sess.run(tf.global_variables_initializer())
for _ in range(3):
# run 先执行update_operation1,后执行update_operation2
result = sess.run(update_operation2)
print(result)
试验结果:
第一个session:结果不唯一。
第一次循环:可能有(1,0)、(1,1)
第二次循环:可能有(2,1)、(2,2)、(2,3)
第二次循环:可能有(3,3)、(3,4)、(3,5)、(3,6)
第二个session:结果唯一。
1 1
2 3
3 6
再看看单个执行的情况:
第三个session:结果唯一。
依次输出1 2 3。
第四个session:结果唯一。
依次输出0 0 0。
总结:
tensorflow各个数据流之间没有顺序,因此需注意计算流之间的依赖关系,避免值被覆盖的问题。