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