2016-02-18 15 views
6

Derin öğrenme projemle TensorFlow'u kullanmaya çalışıyorum.
İşte bu formülde benim degrade güncelleştirmesini uygulamak gerekir:Tensorflow ve Theano'da momentum gradyan güncellemesi farklı mı?

enter image description here

Ben de Theano bu kısmını uygulamaya sahip ve beklenen cevap geldi. Ama TensorFlow'un MomentumOptimizer'u kullanmaya çalıştığımda, sonuç gerçekten çok kötü. Aralarında ne farklı olduğunu bilmiyorum.

Theano:

TensorFlow
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 

:

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) 

cevap

5

Eğer TensorFlow [link] momentum optimizer uygulanması bakarsanız, o kadar uygulanan aşağıdaki gibidir:

accum = accum * momentum() + grad; 
var -= accum * lr(); 

Gördüğünüz gibi, formüller biraz farklı. Öğrenme hızına göre ölçekleme momentum terimi farklılıklarınızı çözmelidir.

Bu tür optimize ediciyi kendiniz uygulamak çok kolaydır. Ortaya çıkan kodu, dahil ettiğiniz Theano'daki snippet'e benzer görünecektir.

+0

Tek fark bu değildir. OP tarafından kaydedilen formül 't (1)' i momentum terimini ekleyerek w (t) 'yi, tensorflow kodu aslında çıkarır. [Buna göre] (http://sebastianruder.com/optimizing-gradient-descent/) tensorflow kodu daha doğru görünüyor. –