7

TensorFlow 使用反向模式自动微分(反向模式 AD),如https://github.com/tensorflow/tensorflow/issues/675所示。

反向模式 AD 需要一个称为 Wengert 列表的数据结构 - 请参阅https://en.wikipedia.org/wiki/Automatic_differentiation#Reverse_accumulation

但是,使用关键字“Wengert List”搜索 TensorFlow 存储库,我什么也没得到。

他们是使用不同的名称,还是摆脱了温格特列表?如果是这样,怎么做?

4

3 回答 3

9

AD 术语非常古老。它是在没有 Python 并且事情很复杂的时候发明的。如今,您可以为此目的使用常规的 Python 列表。

反向AD的实现是在这里gradients的功能gradients_impl.py

用于存储磁带的数据结构在第 532 行初始化,它是一个 Python 队列

# Initialize queue with to_ops.
queue = collections.deque()
于 2017-05-09T14:23:51.217 回答
4

但是,使用关键字“Wengert List”搜索 TensorFlow 存储库,但我一无所获。

这是因为 TensorFlow 不是基于磁带的 AD,它是基于图形的 AD系统。

Wengert 列表将是描述操作最初执行顺序的磁带。

还有基于源代码转换的 AD,该系统的一个很好的例子是Tangent

现在几乎没有人使用磁带(Wengert 列表)了。例如检查PyTorch 的功能(第 2 页)。

于 2020-07-15T09:07:48.433 回答
1

TensorFlow 2 与 JAX 和 Autograd 一样使用 Wengert 列表(磁带)。这是因为这些工具使用某种gradient_tape.

Tensorflow 1 没有使用 Wengert 列表来跟踪正在执行的计算,而是使用静态图来跟踪正在执行的计算。这具有一定的性能优势,但限制了 TensorFlow 1 的能力。

于 2020-01-28T17:39:12.900 回答