|
a |
|
b/reproducibility/embedders/scheduler.py |
|
|
1 |
""" |
|
|
2 |
From OpenCLIP |
|
|
3 |
https://github.com/mlfoundations/open_clip/blob/main/src/training/scheduler.py |
|
|
4 |
""" |
|
|
5 |
|
|
|
6 |
import numpy as np |
|
|
7 |
|
|
|
8 |
|
|
|
9 |
def assign_learning_rate(optimizer, new_lr): |
|
|
10 |
for param_group in optimizer.param_groups: |
|
|
11 |
param_group["lr"] = new_lr |
|
|
12 |
|
|
|
13 |
|
|
|
14 |
def _warmup_lr(base_lr, warmup_length, step): |
|
|
15 |
return base_lr * (step + 1) / warmup_length |
|
|
16 |
|
|
|
17 |
|
|
|
18 |
def cosine_lr(optimizer, base_lr, warmup_length, steps): |
|
|
19 |
def _lr_adjuster(step): |
|
|
20 |
if step < warmup_length: |
|
|
21 |
lr = _warmup_lr(base_lr, warmup_length, step) |
|
|
22 |
else: |
|
|
23 |
e = step - warmup_length |
|
|
24 |
es = steps - warmup_length |
|
|
25 |
lr = 0.5 * (1 + np.cos(np.pi * e / es)) * base_lr |
|
|
26 |
assign_learning_rate(optimizer, lr) |
|
|
27 |
return lr |
|
|
28 |
return _lr_adjuster |