Jika Anda ingin menetapkan kecepatan pembelajaran khusus untuk interval zaman seperti 0 < a < b < c < ...
. Kemudian Anda dapat menentukan kecepatan pemelajaran Anda sebagai tensor bersyarat, bersyarat pada langkah global, dan memasukkannya seperti biasa ke pengoptimal.
Anda bisa mencapai ini dengan sekumpulan tf.cond
pernyataan bertingkat , tetapi lebih mudah untuk membangun tensor secara rekursif:
def make_learning_rate_tensor(reduction_steps, learning_rates, global_step):
assert len(reduction_steps) + 1 == len(learning_rates)
if len(reduction_steps) == 1:
return tf.cond(
global_step < reduction_steps[0],
lambda: learning_rates[0],
lambda: learning_rates[1]
)
else:
return tf.cond(
global_step < reduction_steps[0],
lambda: learning_rates[0],
lambda: make_learning_rate_tensor(
reduction_steps[1:],
learning_rates[1:],
global_step,)
)
Kemudian untuk menggunakannya, Anda perlu mengetahui berapa banyak langkah pelatihan yang ada dalam satu epoch, sehingga kita dapat menggunakan langkah global untuk beralih pada waktu yang tepat, dan terakhir menentukan epoch dan kecepatan pembelajaran yang Anda inginkan. Jadi jika saya ingin kecepatan pembelajaran masing [0.1, 0.01, 0.001, 0.0001]
- [0, 19], [20, 59], [60, 99], [100, \infty]
masing selama interval periode , saya akan melakukan:
global_step = tf.train.get_or_create_global_step()
learning_rates = [0.1, 0.01, 0.001, 0.0001]
steps_per_epoch = 225
epochs_to_switch_at = [20, 60, 100]
epochs_to_switch_at = [x*steps_per_epoch for x in epochs_to_switch_at ]
learning_rate = make_learning_rate_tensor(epochs_to_switch_at , learning_rates, global_step)
FailedPreconditionError (see above for traceback): Attempting to use uninitialized value beta2_power