1. ホーム
  2. python

[解決済み] GradientDescentOptimizerの適応学習率はどのように設定するのですか?

2022-11-09 15:56:51

質問

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)

ここで気になるのは、学習率の更新ルールやその減衰値の設定方法がわからないことです。

ここで適応学習率を使うにはどうしたらいいでしょうか?

どのように解決するのですか?

まず最初に 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})

別の方法として、スカラー tf.Variable を作成し、学習率を変更するたびにそれを代入することもできます。