在tf.contrib.layers.optimize_loss中使用指数衰减

时间:2017-09-06 15:03:49

标签: python tensorflow

tf.contrib.layers.optimize_loss的文档提到了提供learning_rate_decay_fn的可能性,例如tf.train.exponential_decay。但是,对于建议的衰减函数,我没有找到如何传递其他参数(decay_stepsdecay_ratestaircase)。

首次尝试:

def my_decay(a, b):
tf.train.exponential_decay(a, b, decay_steps=5000, decay_rate=0.5,
                           staircase=True, name="LR_decay")


train_op = tf.contrib.layers.optimize_loss(
    loss,
    global_step=global_counter,
    learning_rate=FLAGS.learning_rate,
    optimizer=optimizer,
    learning_rate_decay_fn=my_decay
)

这会导致ValueError(尝试将'值'转换为张量并失败。错误:不支持任何值)。可能是由于函数是python函数而不是TensorFlow操作。

第二次尝试:

train_op = tf.contrib.layers.optimize_loss(
    loss,
    global_step=global_counter,
    learning_rate=FLAGS.learning_rate,
    optimizer=optimizer,
    learning_rate_decay_fn=tf.train.exponential_decay(decay_steps=5000, decay_rate=0.5,
                               staircase=True, name="LR_decay")
)

抱怨2个缺少位置参数(因为调用缺少参数的函数不返回函数但导致尝试评估)。

直接向optimize_loss函数添加位置参数的另一种尝试也失败了(因为参数不会传递下来,而是直接看作函数的参数,必须失败。)

我如何传递必要的论据?

1 个答案:

答案 0 :(得分:1)

我认为你的意思是在return tf.train.exponential_decay(...的定义中说my_decay