Tôi đang cố gắng sử dụng TensorFlow với dự án học tập chuyên sâu của mình.
Ở đây tôi cần thực hiện cập nhật dốc của tôi trong công thức này:Điểm khác biệt về cập nhật gradient động trong Tensorflow và Theano như thế nào?
Tôi cũng đã thực hiện phần này trong Theano, và nó được đưa ra câu trả lời mong đợi. Nhưng khi tôi cố gắng sử dụng số MomentumOptimizer
của TensorFlow, kết quả thực sự là xấu. Tôi không biết những gì là khác nhau giữa chúng.
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)
Nó không phải là sự khác biệt duy nhất. Công thức được đăng bởi OP cập nhật 'w (t)' bằng cách thêm thuật ngữ động lượng '\ alpha v (t-1)', trong khi mã tensorflow thực sự trừ nó. Theo [this] (http://sebastianruder.com/optimizing-gradient-descent/) mã tensorflow có vẻ chính xác hơn. –