2017-10-09 19 views
1

の変数にカスタム学習率を適用すると、私はオプティマイザにそれを与える、それが計算グラフに必要な分化および更新条件を追加します。は、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を、ネットワーク内のすべての異なるパラメータに対して異なってスケールしたいと思っています。例えば、ABをネットワーク内の2つの異なる学習可能パラメータとし、dL/dAdL/dBに損失に関するパラメータの偏微分を与えます。

cacbは異なるパラメータのための特別な学習率スケールです
Ma <- 0.9*Ma + ca*learning_rate*dL/dA 
    A <- A - Ma 

    Mb <- 0.9*Mb + cb*learning_rate*dL/dB 
    B <- B - Mb 

:私はこれを変更したい

Ma <- 0.9*Ma + learning_rate*dL/dA 
    A <- A - Ma 

    Mb <- 0.9*Mb + learning_rate*dL/dB 
    B <- B - Mb 

:として運動量のオプティマイザは、変数を更新します。私が理解する限り、Tensorflowはこのような場合にはcompute_gradientsapply_gradientsメソッドを呼び出すことができますが、ドキュメントの使用方法はあまり明確ではありません。どんな助けでも大歓迎です。勾配を計算するのに

+0

[Tensorflowでレイヤー単位の学習率を設定する方法](https://stackoverflow.com/questions/34945554/how-to-set-layer-wise-learning-rate-in-tensorflow) –

答えて

2

:今

self.gradients = tf.gradients(self.loss, tf.trainable_variables()) 

、あなたが想定するとsess.run([model.gradients], feed_dict)

を使用してグラデーションにアクセスするには、tf.Variable(としてlearning_rateを宣言している)、あなたが使用して学習率を割り当てることができますコード:

sess.run(tf.assign(model.lr, args.learning_rate * (args.decay_rate ** epoch))) 

上記のコードは一例です。目的に合わせて変更することができます。

+0

その場合は、Tensorflowのものを使用するのではなく、自分のオプティマイザをコーディングする必要があります。とにかくそれは他の選択肢がないように見えるので、行く方法のように見えます。 –