tensorflow c++ API 是否支持反向传播的自动微分?
Does tensorflow c++ API support automatic differentiation for backpropagation?
tensor-flow C++ API是否支持自动微分反向传播梯度?
如果我用 C++ 编写一个图,并想在 C++ 代码中 运行 它(而不是 python!),自动微分会起作用吗?
让我们假设图中的每个操作都有梯度实现。
我认为关于张量流 C++ API 能做什么和不能做什么的文档非常差。
非常感谢您的帮助
技术上 可以,但据我所知,自动微分在 Python 中只有 "configured"。我的意思是,在较低的层次上,每个 TensorFlow 操作 而不是 声明自己的梯度是什么(即计算其梯度的相应操作)。而是在 Python 级别声明。例如,您可以查看 math_ops.py
。您会看到,除此之外,还有几个用 @ops.RegisterGradient(...)
修饰的函数。这个装饰器所做的是将该函数添加到操作及其梯度的全局注册表(在 Python 中)。因此,例如,优化器 类 主要在 Python 中实现,因为它们利用此注册表来构建反向传播计算(而不是为此目的使用原生 TensorFlow 原语,后者不存在)。
所以关键是你可以使用相同的操作进行相同的计算(然后用相同的内核实现),但我不认为 C++ 有(或永远不会有)这样的梯度注册表(和优化器 类),因此您需要自己计算或复制该反向传播构造。一般来说,C++ API 不太适合构建计算图。
现在另一个问题(也许这就是您首先要问的问题)是您是否可以 运行 一个在 C++ 中进行反向传播的现有图。我的意思是在 Python 中构建一个计算图,创建一个优化器(它反过来在图中创建必要的操作来计算梯度和更新变量)并导出图,然后在 C++ 中加载该图,然后运行它。这是完全可能的,与 运行在 TensorFlow C++ 中使用任何其他类型的东西没有什么不同。
tensor-flow C++ API是否支持自动微分反向传播梯度?
如果我用 C++ 编写一个图,并想在 C++ 代码中 运行 它(而不是 python!),自动微分会起作用吗?
让我们假设图中的每个操作都有梯度实现。
我认为关于张量流 C++ API 能做什么和不能做什么的文档非常差。
非常感谢您的帮助
技术上 可以,但据我所知,自动微分在 Python 中只有 "configured"。我的意思是,在较低的层次上,每个 TensorFlow 操作 而不是 声明自己的梯度是什么(即计算其梯度的相应操作)。而是在 Python 级别声明。例如,您可以查看 math_ops.py
。您会看到,除此之外,还有几个用 @ops.RegisterGradient(...)
修饰的函数。这个装饰器所做的是将该函数添加到操作及其梯度的全局注册表(在 Python 中)。因此,例如,优化器 类 主要在 Python 中实现,因为它们利用此注册表来构建反向传播计算(而不是为此目的使用原生 TensorFlow 原语,后者不存在)。
所以关键是你可以使用相同的操作进行相同的计算(然后用相同的内核实现),但我不认为 C++ 有(或永远不会有)这样的梯度注册表(和优化器 类),因此您需要自己计算或复制该反向传播构造。一般来说,C++ API 不太适合构建计算图。
现在另一个问题(也许这就是您首先要问的问题)是您是否可以 运行 一个在 C++ 中进行反向传播的现有图。我的意思是在 Python 中构建一个计算图,创建一个优化器(它反过来在图中创建必要的操作来计算梯度和更新变量)并导出图,然后在 C++ 中加载该图,然后运行它。这是完全可能的,与 运行在 TensorFlow C++ 中使用任何其他类型的东西没有什么不同。