在Tensorflow
问题描述:
应用自定义学习率变量在Tensorflow,之后我得到我的损失来看,我把它给了优化,并增加了必要的分化和更新方面的计算图:在Tensorflow
global_counter = tf.Variable(0, dtype=DATA_TYPE, trainable=False)
learning_rate = tf.train.exponential_decay(
INITIAL_LR, # Base learning rate.
global_counter, # Current index into the dataset.
DECAY_STEP, # Decay step.
DECAY_RATE, # Decay rate.
staircase=True)
optimizer = tf.train.MomentumOptimizer(learning_rate, 0.9).minimize(network.finalLoss, global_step=global_counter)
feed_dict = {TRAIN_DATA_TENSOR: samples, TRAIN_LABEL_TENSOR: labels}
results = sess.run([optimizer], feed_dict=feed_dict)
我想对这个过程进行一个小的修改。我想为网络中的每个不同参数都调整learning_rate
。例如,让网络中的两个不同的可训练参数A
和B
,并让dL/dA
和dL/dB
参数相对于损失的偏导数。动量优化更新变量:
Ma <- 0.9*Ma + learning_rate*dL/dA
A <- A - Ma
Mb <- 0.9*Mb + learning_rate*dL/dB
B <- B - Mb
我要修改此为:
Ma <- 0.9*Ma + ca*learning_rate*dL/dA
A <- A - Ma
Mb <- 0.9*Mb + cb*learning_rate*dL/dB
B <- B - Mb
凡ca
和cb
有特殊学习速率为尺度不同的参数。据我所知,Tensorflow有compute_gradients
和apply_gradients
我们可以调用这种情况下的方法,但文档不太清楚如何使用它们。任何帮助将非常感激。
答
TO的梯度:
self.gradients = tf.gradients(self.loss, tf.trainable_variables())
现在,您可以访问使用sess.run([model.gradients], feed_dict)
假设渐变,你已经宣布learning_rate
作为tf.Variable(),您可以使用分配学习率以下代码:
sess.run(tf.assign(model.lr, args.learning_rate * (args.decay_rate ** epoch)))
上面的代码仅仅是一个例子。您可以修改它以用于您的目的。
+0
在这种情况下,我需要编写我自己的优化器,而不是使用Tensorflow。无论如何,它看起来像要走的路,因为它似乎没有其他选择。 –
[如何在Tensorflow中设置图层学习速率?](https://stackoverflow.com/questions/34945554/how-to-set-layer-wise-learning-rate-in-tensorflow) –