0

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

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

4

1 回答 1

1

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

于 2017-07-31T22:08:20.617 回答