我正在尝试实现一个新的优化器,它包含Gradient Descent方法的很大一部分(这意味着我想执行一些Gradient Descent步骤,然后对输出执行不同的操作,然后再次执行)。不幸的是,我找到了两条信息;
如果它们都是真的那么2对我来说没有意义,我正在试图找出构建新优化器的正确方法(算法和其他一切都非常清晰)。
非常感谢
答案 0 :(得分: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)
,并且最终用户之前可以使用代码轻松地模拟它,因此这可能是它未被添加的原因。
"渐变处理" part完全通过在python代码中继承optimizer.Optimizer
来处理。 python代码仅定义用于保存移动窗口平均值,渐变平方等的存储类型,并执行向其传递已计算梯度的c ++代码。
c ++代码有4
行,用于更新存储的平均值和参数。
那么对于你的问题"如何构建优化器":
1。定义在梯度计算之间需要存储的内容
继承optimizer.Optimizer
3.实现用c ++更新变量。