TensorFlow中的Wengert列表在哪里?

时间:2017-05-09 06:56:31

标签: tensorflow automatic-differentiation

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

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

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

他们使用不同的名字,还是他们摆脱了Wengert List?如果是这样,怎么样?

3 个答案:

答案 0 :(得分:4)

AD术语很老。它是在没有Python并且事情变得复杂的时候发明的。现在你可以为此目的使用常规的Python列表。

反向AD的实施位于gradients here

gradients_impl.py函数中

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

# Initialize queue with to_ops.
queue = collections.deque()

答案 1 :(得分:2)

但是,使用关键字“ Wengert List”在TensorFlow存储库中进行搜索,但是却一无所获。

这是因为TensorFlow不是基于 tape的AD ,而是基于基于图的AD 系统。

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

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

如今,几乎没有人再使用磁带(Wengert列表)。例如检查PyTorch does(第2页)是什么。

答案 2 :(得分:1)

TensorFlow 2使用Wengert列表(磁带),JAX和Autograd也是如此。这是因为这些工具通过某种gradient_tape来跟踪对变量的操作。

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