我正在使用TensorFlow训练神经网络。这就是我初始化的方式GradientDescentOptimizer:
GradientDescentOptimizer
init = tf.initialize_all_variables() sess = tf.Session() sess.run(init) mse = tf.reduce_mean(tf.square(out - out_)) train_step = tf.train.GradientDescentOptimizer(0.3).minimize(mse)
这里的问题是,我不知道如何为学习速率设置更新规则或为它设置衰减值。
在这里如何使用自适应学习率?
首先,tf.train.GradientDescentOptimizer旨在对所有步骤中的所有变量使用恒定的学习率。TensorFlow还提供了开箱即用的自适应优化器,包括tf.train.AdagradOptimizer和tf.train.AdamOptimizer,这些可以用作即插即用的替代品。
tf.train.GradientDescentOptimizer
tf.train.AdagradOptimizer
tf.train.AdamOptimizer
但是,如果您希望通过原始的梯度下降来控制学习速率,则可以利用以下事实:构造函数的learning_rate参数可以是一个对象。这使您可以在每个步骤中为学习率计算一个不同的值,例如:tf.train.GradientDescentOptimizerTensor
learning_rate
Tensor
learning_rate = tf.placeholder(tf.float32, shape=[]) # ... train_step = tf.train.GradientDescentOptimizer( learning_rate=learning_rate).minimize(mse) sess = tf.Session() # Feed different values for learning rate to each training step. sess.run(train_step, feed_dict={learning_rate: 0.1}) sess.run(train_step, feed_dict={learning_rate: 0.1}) sess.run(train_step, feed_dict={learning_rate: 0.01}) sess.run(train_step, feed_dict={learning_rate: 0.01})
或者,您可以创建一个tf.Variable保存学习率的标量,并在每次要更改学习率时分配它。
tf.Variable