20200404

@liwei

Plan

  • tensorflow control flow
  • leetcode daily

Notes

在tensorflow中,控制流的高级api为两种形式,分别是tf.cond和tf.while_loop。这两个api的具体实现,在tensorflow1.0版本和tensorflow2.0版本是完全不一样的。在v2版本中,基本的操作变成了if和while。 v1的底层为之前说的五种基本operation, switch, merge, enter, exit, nextiteration。 而在v2版本,实现是类似函数式的。v2版本更容易理解,更容易硬件集成,但是v1版本则更为容易进行优化,v2的版本可以lowering成v1版本。 在训练中,需要重点关注,中间结果如何存储,梯度如何进行传递。

在控制流中,tensorArray也是需要我们重点关注的点。其本质就是一个tensor的数组。

宏观上说,这个control flow的构建过程是:tensorflow api -> graph api -> graph ops。

leetcode daily

今天的题目是42. 接雨水,难度为困难。没做出来,看的答案,进行一下总结。

思路一:按照列进行统计。每次针对一列,计算左边最高的left,计算右边最高的right,则min(left, right) - 自身高度height,就是这一列积水。以此统计所有列的和。每一列类似木桶效应的思想。 思路二:思路一的进阶版,用数组存储每一列左边最高的行,则left_max[i] = max(left_max[i - 1], height[i]),右边同理。在思路一的前提下,优化了每次得到左边最高和右边最高的时间。 思路三:在思路二再进行优化,每次只保存左边最大和右边最大,而不是用数组。

leetcode中的思路,真的一步步优化,让人钦佩无比。

More

控制流参考 Inside tensorflow

关于python环境。今天查了一下,conda和virtualenv之间的关系,感觉能得到的结论是conda明显更为强大易用。在stackoverflow上大伙能达成的一致就是,赶紧用conda吧,别花时间折腾什么virtualenv了。