Tensorflow和Theano中的动量梯度更新有什么不同?

时间:2016-02-18 17:10:12

标签: tensorflow gradient-descent momentum

我正在尝试将TensorFlow用于我的深度学习项目 在这里,我需要在此公式中实现渐变更新:

enter image description here

我也在Theano中实现了这个部分,它得出了预期的答案。但是当我尝试使用TensorFlow的MomentumOptimizer时,结果非常糟糕。我不知道他们之间有什么不同。

Theano:

def gradient_updates_momentum_L2(cost, params, learning_rate, momentum, weight_cost_strength):
    # Make sure momentum is a sane value
    assert momentum < 1 and momentum >= 0
    # List of update steps for each parameter
    updates = []
    # Just gradient descent on cost
    for param in params:
        param_update = theano.shared(param.get_value()*0., broadcastable=param.broadcastable)
        updates.append((param, param - learning_rate*(param_update + weight_cost_strength * param_update)))
        updates.append((param_update, momentum*param_update + (1. - momentum)*T.grad(cost, param)))
    return updates

TensorFlow:

l2_loss = tf.add_n([tf.nn.l2_loss(v) for v in tf.trainable_variables()])
cost = cost + WEIGHT_COST_STRENGTH * l2_loss
train_op = tf.train.MomentumOptimizer(LEARNING_RATE, MOMENTUM).minimize(cost)

1 个答案:

答案 0 :(得分:5)

如果你看一下TensorFlow [link]中动量优化器的实现,它实现如下:

ForEach

如您所见,公式有点不同。按学习率缩放动量项可以解决您的差异。

自己实现这样的优化器也很容易。所结果的 代码看起来类似于您包含的Theano中的代码段。