dis*_*ame 96 python tensorflow
我正在使用TensorFlow来训练神经网络.这是我初始化的方式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)
Run Code Online (Sandbox Code Playgroud)
这里的问题是我不知道如何为学习率或衰减值设置更新规则.
我如何在这里使用自适应学习率?
mrr*_*rry 190
首先,tf.train.GradientDescentOptimizer
旨在对所有步骤中的所有变量使用恒定学习率.TensorFlow还提供开箱即用的自适应优化器,包括tf.train.AdagradOptimizer
和tf.train.AdamOptimizer
,以及这些可用作插入式替换.
但是,如果要使用其他方法控制学习速率,可以利用构造函数的learning_rate
参数可以作为对象这一事实.这允许您为每个步骤中的学习率计算不同的值,例如:tf.train.GradientDescentOptimizer
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})
Run Code Online (Sandbox Code Playgroud)
或者,您可以创建一个tf.Variable
保持学习速率的标量,并在每次想要更改学习速率时分配它.
dga*_*dga 88
Tensorflow提供了一个自动将指数衰减应用于学习速率张量的操作:tf.train.exponential_decay
.有关它的使用示例,请参阅MNIST卷积模型示例中的此行.然后使用上面的@mrry建议将此变量作为learning_rate参数提供给您选择的优化器.
要看的关键摘录是:
# Optimizer: set up a variable that's incremented once per batch and
# controls the learning rate decay.
batch = tf.Variable(0)
learning_rate = tf.train.exponential_decay(
0.01, # Base learning rate.
batch * BATCH_SIZE, # Current index into the dataset.
train_size, # Decay step.
0.95, # Decay rate.
staircase=True)
# Use simple momentum for the optimization.
optimizer = tf.train.MomentumOptimizer(learning_rate,
0.9).minimize(loss,
global_step=batch)
Run Code Online (Sandbox Code Playgroud)
请注意global_step=batch
要最小化的参数.这告诉优化器每次训练时都会为你帮助增加'batch'参数.
Sal*_*ali 82
梯度下降算法使用您在初始化期间可以提供的恒定学习速率.您可以通过Mrry表现的方式传递各种学习率.
但除此之外,您还可以使用更高级的优化器,它们具有更快的收敛速度并适应这种情况.
以下是基于我的理解的简要说明:
Adam或自适应动量是一种类似于AdaDelta的算法.但除了存储每个参数的学习率之外,它还分别存储每个参数的动量变化
一个几可视化:
来自tensorflow官方文档
global_step = tf.Variable(0, trainable=False)
starter_learning_rate = 0.1
learning_rate = tf.train.exponential_decay(starter_learning_rate, global_step,
100000, 0.96, staircase=True)
# Passing global_step to minimize() will increment it at each step.
learning_step = (
tf.train.GradientDescentOptimizer(learning_rate)
.minimize(...my loss..., global_step=global_step))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
96359 次 |
最近记录: |