Przede wszystkim, tf.train.GradientDescentOptimizer
jest zaprojektowany do używania stałej szybkości uczenia się dla wszystkich zmiennych we wszystkich etapach. TensorFlow oferuje również gotowe optymalizatory adaptacyjne, w tym tf.train.AdagradOptimizer
i tf.train.AdamOptimizer
, które mogą być używane jako zamienniki.
Jednakże, jeśli chcesz kontrolować szybkość uczenia się, stosując gradienty waniliowe, możesz skorzystać z faktu, że argument learning_rate
dla tf.train.GradientDescentOptimizer
constructor może być obiektem Tensor
. To pozwala obliczyć inną wartość dla nauki stopy w każdym kroku, na przykład:
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})
Alternatywnie, można utworzyć skalarnego tf.Variable
która posiada szybkość uczenia się, i przypisać go za każdym razem, gdy chcesz zmienić wskaźnik uczenia się.
Jest to dobry zwyczaj, aby zainicjować wszystkie zmienne _after_ określić twój optymalizator, ponieważ niektóre optymalizatory, takie jak AdamOptimizer, używają własnych zmiennych, które również wymagają inicjalizacji. W przeciwnym razie może pojawić się błąd, który wygląda następująco: '' 'FailedPreconditionError (zobacz powyżej dla traceback): Próba użycia niezainicjowanej wartości beta2_power'''' – JYun