tf.assign_add()和+区别, tf.identify

1.tf.assign_add() 和+区别

tf.assign_add()相当于将图上的点a进行加法运算,然后将结果赋值给节点a,这样图上只有一个节点,如下图所示,最后的所有值都会流回variable
在这里插入图片描述

a = tf.Variable(3,name='a')
op = tf.assign_add(a,1)
b = tf.assign_add(op, 1)
tf.summary.scalar('a', a)
tf.summary.scalar('op', op)
tf.summary.scalar('b', b)
merge = tf.summary.merge_all()
writer = tf.summary.FileWriter('sss', tf.get_default_graph())
for v in tf.trainable_variables():
   print(v)
with tf.Session() as sess:
   sess.run(tf.global_variables_initializer())
   m =  sess.run(merge)
   writer.add_summary(m)
   sess.run(op)
   sess.run(op)
   sess.run(op)
   print(sess.run(op))
   print(op)
   print(a)
   print(b)
   print(sess.run(a))

而+运算,取出节点a上的值进行运算,但是运算的结果不会流回varialbe中
在这里插入图片描述

a = tf.Variable(3,name='a')
op = tf.assign_add(a,1)
b = op + 1
tf.summary.scalar('a', a)
tf.summary.scalar('op', op)
tf.summary.scalar('b', b)
merge = tf.summary.merge_all()
writer = tf.summary.FileWriter('sss', tf.get_default_graph())
for v in tf.trainable_variables():
   print(v)
with tf.Session() as sess:
   sess.run(tf.global_variables_initializer())
   m =  sess.run(merge)
   writer.add_summary(m)
   sess.run(op)
   sess.run(op)
   sess.run(op)
   print(sess.run(op))
   print(op)
   print(a)
   print(b)
   print(sess.run(a))

2.tf.identify()

  • y = tf.identity(x)是一个op操作表示将x的值赋予y
  • y = x只是一个内存拷贝,并不是一个op,而control_dependencies只有当里面是一个Op的时候才能起作用。
  • Assign, Identity 这两个OP 与Variable 关系极其紧密,分别实现了变量的修改与读取。因此,它们必须与Variable 在同一个设备上执行;这样的关系,常称为同位关系(Colocation)。
    下面两个例子,可以说是一目了然。
x = tf.Variable(0.0)
#返回一个op,表示给变量x加1的操作
x_plus_1 = tf.assign_add(x, 1)
  
#control_dependencies的意义是,在执行with包含的内容(在这里就是 y = x)前
#先执行control_dependencies中的内容(在这里就是 x_plus_1)
with tf.control_dependencies([x_plus_1]):
    y = x
print(x)
print(y)
init = tf.initialize_all_variables()
  
with tf.Session() as session:
    init.run()
    for i in xrange(5):
        print(y.eval())
'''
<tf.Variable 'Variable:0' shape=() dtype=float32_ref>
<tf.Variable 'Variable:0' shape=() dtype=float32_ref>
>>0
0
0
0
0
'''
x = tf.Variable(0.0)
#返回一个op,表示给变量x加1的操作
x_plus_1 = tf.assign_add(x, 1)
  
#control_dependencies的意义是,在执行with包含的内容(在这里就是 y = x)前
#先执行control_dependencies中的内容(在这里就是 x_plus_1)
with tf.control_dependencies([x_plus_1]):
    y = tf.identify(x)
print(x)
print(y)
init = tf.initialize_all_variables()
  
with tf.Session() as session:
    init.run()
    for i in xrange(5):
        print(y.eval())
'''
Tensor("Identity:0", shape=(), dtype=float32)
<tf.Variable 'Variable:0' shape=() dtype=float32_ref>
1.0
2.0
3.0
4.0
5.0
'''
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值