在TensorFlow

时间:2016-11-17 14:03:21

标签: c++ python-2.7 optimization tensorflow gradient-descent

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

  1. 您无法使用优化程序执行给定数量的步骤。我错了吗?因为添加它似乎是合乎逻辑的选择。
  2. 鉴于1为真,您需要使用C ++作为内核对优化器进行编码,从而失去TensorFlow的强大功能(如计算渐变)。
  3. 如果它们都是真的那么2对我来说没有意义,我正在试图找出构建新优化器的正确方法(算法和其他一切都非常清晰)。

    非常感谢

1 个答案:

答案 0 :(得分:1)

  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)
    
  2. 如果您需要执行几个优化步骤,您只需循环执行:

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

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

    1. 让我们看一下示例优化器的实现,Adam:python codec++ code
    2. "渐变处理" part完全通过在python代码中继承optimizer.Optimizer来处理。 python代码仅定义用于保存移动窗口平均值,渐变平方等的存储类型,并执行向其传递已计算梯度的c ++代码。

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

      那么对于你的问题"如何构建优化器": 1。定义在梯度计算之间需要存储的内容 继承optimizer.Optimizer 3.实现用c ++更新变量。