gpt4 book ai didi

c++ - 在 TensorFlow 上创建优化器的步骤

转载 作者:行者123 更新时间:2023-11-30 05:20:23 25 4
gpt4 key购买 nike

我正在尝试实现一个新的优化器,它包含梯度下降方法的很大一部分(这意味着我想执行一些梯度下降步骤,然后对输出执行不同的操作,然后再执行一次)。不幸的是,我找到了2条信息;

  1. 您无法使用优化器执行给定数量的步骤。我错了吗?因为添加这似乎是一个合乎逻辑的选择。
  2. 鉴于 1 为真,您需要使用 C++ 作为内核对优化器进行编码,从而失去 TensorFlow 的强大可能性(例如计算梯度)。

如果它们都为真,那么 2 对我来说毫无意义,我正在尝试弄清楚构建新优化器的正确方法是什么(算法和其他一切都非常清楚)。

非常感谢

最佳答案

  1. 我对此不是 100% 肯定,但我认为你是对的。但我看不到将此类选项添加到 TensorFlow 的好处。我所知道的基于 GD 的优化器通常是这样工作的:

    for i in num_of_epochs:
    g = gradient_of_loss()
    some_storage = f(previous_storage, func(g))
    params = func2(previous_params, some_storage)

如果您需要执行几个优化步骤,您可以简单地在一个循环中执行:

train_op = optimizer.minimize(loss)
for i in range(10):
sess.run(train_op)

我不认为当前优化器的实现需要参数 multitrain_op = optimizer.minimize(loss, steps) 并且最终用户可以很容易地用之前的代码模拟它,所以这是可能是未添加的原因。

  1. 让我们看一下示例优化器的 TF 实现,Adam:python code , c++ code .

“梯度处理”部分完全是通过继承python代码中的optimizer.Optimizer来处理的。 python 代码仅定义存储类型来保存移动窗口平均值、梯度平方等,并执行 c++ 代码将已计算的梯度传递给它。

c++ 代码有 4 行,更新存储的平均值和参数。

所以对于您的问题“如何构建优化器”:1.定义在梯度计算之间需要存储的内容2.继承optimizer.Optimizer3. 在c++中实现更新变量。

关于c++ - 在 TensorFlow 上创建优化器的步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40656925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com