다음과 같은 시대의 간격에 대한 특정 학습률을 설정하려면 0 < a < b < c < ...
. 그런 다음 학습률을 조건부 텐서로 정의하고 전역 단계에서 조건부로이를 옵티 마이저에 정상적으로 제공 할 수 있습니다.
여러 개의 중첩 된 tf.cond
문으로 이를 달성 할 수 있지만 재귀 적으로 텐서를 빌드하는 것이 더 쉽습니다.
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,)
)
그런 다음이를 사용하려면 글로벌 단계를 사용하여 적시에 전환하고 마지막으로 원하는 시대와 학습률을 정의 할 수 있도록 단일 시대에 몇 개의 교육 단계가 있는지 알아야합니다. 따라서 각각 [0.1, 0.01, 0.001, 0.0001]
의 에포크 간격 동안 학습률을 원한다면 다음 [0, 19], [20, 59], [60, 99], [100, \infty]
을 수행합니다.
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