6
我正在尝试在我的深度学习项目中使用TensorFlow。
在这里我需要实现我的梯度更新此公式中:Tensorflow和Theano的动量梯度更新有什么不同?
我也实现这部分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)
这不是唯一的区别。 OP发布的公式通过添加动量项'\ alpha v(t-1)'来更新'w(t)',而tensorflow代码实际上减去了它。根据[this](http://sebastianruder.com/optimizing-gradient-descent/),tensorflow代码似乎更加正确。 –