Ich versuche, TensorFlow mit meinem Deep Learning-Projekt zu verwenden.
Hier muß ich mein Gradient Update in dieser Formel implementieren:Was ist anders an Dynamik-Gradienten-Update in Tensorflow und Theano wie folgt?
Ich habe auch diesen Teil in Theano implementieren, und es kam die erwartete Antwort aus. Aber wenn ich versuche, TensorFlow MomentumOptimizer
zu verwenden, ist das Ergebnis wirklich schlecht. Ich weiß nicht, was zwischen ihnen ist.
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)
Es ist nicht der einzige Unterschied. Die von OP gepostete Formel aktualisiert "w (t)", indem sie den Impulsterm "\ alpha v (t-1)" hinzufügt, während der Tensorflow-Code ihn subtrahiert. Nach [diesem] (http://sebastianruder.com/optimizing-gradient-descent/) scheint der Tensorflow-Code korrekter zu sein. –