黑马程序员技术交流社区

标题: 【上海校区】tensorflow随笔-条件循环控制(14) [打印本页]

作者: 不二晨    时间: 2018-9-9 11:13
标题: 【上海校区】tensorflow随笔-条件循环控制(14)
【转载】        https://blog.csdn.net/u010255642/article/details/82530990

因为一个循环迭代中的循环计数器依赖于前一个迭代中的值循环计数器本身不能并行递增。

i这个计算器本身,每次迭代增加,因此依赖于前一个迭代中的值。因此,如果我们只想要计数器i的最终值(我们在行打印(sess.run(i)),那么x永远不会递增,但是计数器i将在单个线程上更新。如下所示:

相反,如果我们希望输出值(我们在行打印(sess.run(out))上打印),那么计数器可以在自己的线程上递增,而x可以在单独的线程上并行递增。

注意:因为i每次递增2,所以x只会递增5次,每次增加1


在极端情况下,可以想象,递增计数器的线程在x递增一次之前一直运行到完成。唯一不可能发生的事情是线程更新x永远不可能超过计数器线程,因为递增x的线程取决于计数器的值。下面模拟了这种情况(i>6时,x更新递增)




  • #!/usr/bin/env python2



  • # -*- coding: utf-8 -*-



  • """



  • Created on Thu Sep  6 10:16:37 2018



  • @author: myhaspl



  • """



  • import tensorflow as tf







  • def b(i,x):



  •     i=tf.Print(i + 1, ,"i:")



  •     x=tf.cond(i<=5,lambda: tf.Print(x,[x],"x:"),lambda: tf.Print(x + 1, [x],"x:"))



  •     return (i,x)











  • def c(i,x):



  •     return tf.less(i,n)







  • n = 10



  • i = 0



  • x = 0







  • i,out = tf.while_loop(c, b, (i,x))



  • with tf.Session() as sess:



  •     print sess.run(out)




  • i:[0]



  • x:[0]



  • i:[1]



  • x:[0]



  • i:[2]



  • x:[0]



  • i:[3]



  • x:[0]



  • i:[4]



  • i:[5]



  • i:[6]x:[0]







  • x:[0]



  • i:[7]



  • x:[1]



  • i:[8]



  • i:[9]



  • x:[2]



  • x:[3]



  • x:[4]



  • 5






作者: 不二晨    时间: 2018-9-13 16:23

很不错,受教了
作者: 魔都黑马少年梦    时间: 2018-11-1 16:45





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2