差异学习率的全局步骤

时间:2018-02-13 03:25:04

标签: python tensorflow google-cloud-ml

基于这个question,我试图实现差异学习率如下:

var_list1 = [variables from first 5 layers]
var_list2 = [the rest of variables]

#Create Two Separate Optimizers
opt1 = tf.train.AdamOptimizer(0.00001)
opt2 = tf.train.AdamOptimizer(0.0001)

# Compute Gradients for eacch set of variables
grads1, variables1 = zip(*opt1.compute_gradients(loss, var_list1))
grads2, variables2 = zip(*opt2.compute_gradients(loss, var_list2))

# Apply Gradients
train_op1 = opt1.apply_gradients(zip(grads1, variables1))
train_op2 = opt2.apply_gradients(zip(grads2, variables2), global_step=global_step)
train_op = tf.group(train_op1, train_op2)

我不确定每个global_step电话中是否应包含apply_gradients,或者它是否应仅包含在1中?我的理解是,当调用apply_gradients时,global_step如果提供(code here)则递增1。基于此,我认为我应该只在global_stepapply_gradients()来电中加入train_op1 = opt1.apply_gradients(zip(grads1, variables1), global_step=global_step) train_op2 = opt2.apply_gradients(zip(grads2, variables2), global_step=global_step) 。任何人都可以确认这是正确的方法吗?

上述内容的替代方法是执行以下操作:

apply_gradients

虽然从技术上讲,每次调用apply_gradients()都是一个步骤,但我的理解是global_step应该代表已经完成的小批量的数量,所以如果我在两个apply_gradients()调用中引用它那么每个小批量的全球步骤将增加两倍。因此,基于此,我相信更准确的实现将是第一次调用它被调用一次。其他人是否同意这是正确的实施?是否包含了{{1}} global_step是否重要?

0 个答案:

没有答案