[tf]tf.assign和 = 的区别

引用
引用

  • tf.assign是创建一个操作符这个操作符具有这个值变量的值,而=是Python中的赋值,tensorflow函数的操作会新建一个节点,如果用Python的=那么就相当于将变量的引用给到这个新节点上,但是在计算图上并没有相应的赋值操作节点(因为只是python对于等式右边节点的一个引用而已),而如果使用tf.assign的话计算图中有赋值节点。
  • 你只要分清哪些是tensorflow中的操作和哪些是python语言的引用操作,就能分清哪些是在建图,哪些只是在改变引用。

第一个例子:因为op是tensorflow中的一个结点,而assign_add是对原始的节点a进行赋值,所以最终的结果是7。

a = tf.Variable(3)
op = tf.assign_add(a,1)
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    sess.run(op)
    sess.run(op)
    sess.run(op)
    sess.run(op)
    print(sess.run(a))
>>7

第二个例子:注意a = a + 1的实际操作是首先将右边a的节点加上1,这是一个新建节点操作,a+1返回的是这个新建节点,此时a = 新建节点。也就是a引用的节点地址从变量a变成了a+1操作符的引用,我们打印出来可以看到,此时的a是一个add操作。这是run(a)就不会修改原始节点name="a"的值,也就是始终为1也就是关键问题是在计算图上没有给原始的变量a进行赋值,所以他的值始终是1,加了1以后add操作符打印出来是2

a = tf.Variable(3)
a = a + 1

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    sess.run(a)
    sess.run(a)
    sess.run(a)
    sess.run(a)
    print(a)
    print(sess.run(a))
>>Tensor("add:0", shape=(), dtype=int32)
4
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,802评论 1 32
  • 随着年龄的增长,对世界的好奇心在减少。 一个婴儿,刚来到这个世界的时候,一切都是新鲜的,什么都想摸摸、碰碰、闻闻,...
    崔宏雷阅读 3,777评论 0 51
  • 这个时节,坐在电影院里,形单影只,看着情侣三三两两,交头低语的情形,一一映在心上。过往的身影依稀浮现。一股无边的惆...
    江湖不归人阅读 747评论 0 0
  • 在安全的时候勇敢,在危险的时候贪生怕死,在弱者面前群起而攻之,在极权面前五体投地,在善良面前展现凶狠凌辱,在罪恶面...
    palmlove阅读 3,550评论 0 0