(3) TensorFlow的变量、理解操作的名字

1.变量初始化

import tensorflow as tf
x=tf.Variable([1,2])
#定义一个常量op
y=tf.constant([3,3])
#定义减法op,sub可以理解为这个减法操作节点的名字
sub=tf.subtract(x,y)
#定义加法op,ad可以理解为这个加法操作节点的名字
ad=tf.add(x,y)

#tensorflow使用变量必须初始化,因此需要下边的语句初始化所有变量,并在会话里运行
init =tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    print(sess.run(sub))
    print(sess.run(ad))
[-2 -1]
[4 5]

2.变量自增例子(了解assign()和‘=+’的区别,以及理解‘操作名字’这一说法)

2.1这个例子是assign()的

assign是对原始节点修改值,而不是新建节点,因此代码执行完后是name="chuShiVariable"的节点值被修改了

import tensorflow as tf
val=tf.Variable(0,name='chuShiVariable')
#定义一个加法操作,名为add1,也可以是返回值
temp=tf.add(val,1)
#定义一个更新val值的操作,即用temp给val赋值,update是操作名字
update=tf.assign(val,temp)
#变量初始化
init=tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    print(sess.run(val))
    for i in range(5):
        #运行update操作的时候,再往上调用temp操作,再调用add()操作
        sess.run(update)
        print(sess.run(val))
0
1
2
3
4
5

2.2 =+

下面程序一直输出是1,是因为将val+1这个操作起名恰好也为val,每次执行print(sess.run(val))时,执行名为val的操作,即执行val(后一个)+1,而后一个val是用tf.Variable(0,name=‘chuShiVariable’)定义的变量,这个变量值没有被更改过,一直是0,因此每次打印val+1时都是打印0+1,所以结果一直是1。
即每次执行val(左)=val(右)+1时,都是在图中建一个名为val(左)的val(右)+1操作节点,而val(右)的值一直没改变过!

import tensorflow as tf
val=tf.Variable(0,name='chuShiVariable')
val=val+1
#变量初始化
init=tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    print(sess.run(val))
    for i in range(5):
        print(sess.run(val))
1
1
1
1
1
1

下面的代码更改了val的值,因此可以正常输出,但还是不要用val+1这种带符号的,尽量用tf.add(val,1)

import tensorflow as tf
val=tf.Variable(0,name='chuShiVariable')
#这一步更改了val值,所以程序可以正常输出,也可以写为 update=tf.assign(val,tf.add(val,1))
update=tf.assign(val,val+1)
#变量初始化
init=tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    print(sess.run(val))
    for i in range(5):
        sess.run(update)
        print(sess.run(val))
0
1
2
3
4
5

2.3 为什么理解为操作名字?

可以看到在 print(sess.run(val),sess.run(update))中,sess.run(update)本意为想打印出update的值,可是函数却是又执行一次,因此将update看作是操作的名字更好些

import tensorflow as tf
val=tf.Variable(0,name='chuShiVariable')
#定义一个加法操作,名为add1,也可以是返回值
temp=tf.add(val,1)
#定义一个更新val值的操作,即用temp给val赋值,update是操作名字
update=tf.assign(val,temp)
#变量初始化
init=tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    print(sess.run(val))
    for i in range(5):
        #运行update操作的时候,再往上调用temp操作,再调用add()操作
        sess.run(update)
        print(sess.run(val),sess.run(update))
0
1 2
3 4
5 6
7 8
9 10
发布了63 篇原创文章 · 获赞 3 · 访问量 1688

猜你喜欢

转载自blog.csdn.net/qq_34405401/article/details/104333881