यदि आप जैसे युगों के अंतराल के लिए विशिष्ट सीखने की दर निर्धारित करना चाहते हैं 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