【问题标题】:Does autodiff in tensorflow work if I have a for loop involved in constructing my graph?如果我在构建图形时有一个 for 循环,那么 tensorflow 中的 autodiff 是否有效?
【发布时间】:2017-07-31 18:36:51
【问题描述】:

我有一种情况,我有一批图像,并且在每个图像中我必须对该图像中的一个小块执行一些操作。现在的问题是批次中每个图像的补丁大小是可变的。所以这意味着我无法对其进行矢量化。我可以通过考虑图像中的整个像素范围来进行矢量化,但是每个图像的补丁大小实际上只是很小的一部分,我不想通过执行操作并存储每个图像中所有像素的结果来浪费我的内存.

简而言之,我需要使用循环。现在我看到 tensorflow 只定义了一个 while 循环,没有 for 循环。所以我的问题是,如果我使用普通的 python 样式的循环来对我的张量执行操作,autodiff 会无法计算我图中的梯度吗?

【问题讨论】:

  • 应该没问题,虽然图表会更大(有 2GB 图表大小限制)
  • @YaroslavBulatov ,感谢您的回复!两个后续问题 - 一个。 2GB 大小;是针对整个图还是针对图中的单个张量(一个节点)?湾。如果正常的 for 循环有效,那么张量流引入 tf.while_loop 是否有原因?只是为了让后端的事情更有效率吗?

标签: machine-learning tensorflow computer-vision deep-learning autodiff


【解决方案1】:

Tensorflow 不知道(因此不关心)图是如何构建的,您甚至可以手动编写每个节点,只要您使用适当的函数即可。所以特别是for循环与TF无关。另一方面,TF while 循环使您能够在图形中表达动态计算,因此,如果您想按顺序处理数据并且只需要内存中的当前数据 - 只有 while 循环才能实现。如果您手动(通过循环)创建一个巨大的图表,它将始终被执行,并且所有内容都存储在内存中。只要这适合你的机器,你应该没问题。另一件事是动态长度,如果有时你需要运行一个循环 10 次,有时是 1000 次,你必须使用 tf.while_loop,你不能用 for 循环来做到这一点(除非你为每个可能的长度创建单独的图表)。

【讨论】:

  • 感谢您的详尽解释!现在更明白为什么 tensorflow 提供了 tf.while_loop。
猜你喜欢
  • 2019-06-13
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 2011-11-14
  • 2015-07-03
相关资源
最近更新 更多