Spaces:
Paused
Paused
| # Copyright (c) 2018, Curious AI Ltd. All rights reserved. | |
| # | |
| # This work is licensed under the Creative Commons Attribution-NonCommercial | |
| # 4.0 International License. To view a copy of this license, visit | |
| # http://creativecommons.org/licenses/by-nc/4.0/ or send a letter to | |
| # Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. | |
| """Functions for ramping hyperparameters up or down | |
| Each function takes the current training step or epoch, and the | |
| ramp length in the same format, and returns a multiplier between | |
| 0 and 1. | |
| """ | |
| import numpy as np | |
| def sigmoid_rampup(current, rampup_length): | |
| """Exponential rampup from https://arxiv.org/abs/1610.02242""" | |
| if rampup_length == 0: | |
| return 1.0 | |
| else: | |
| current = np.clip(current, 0.0, rampup_length) | |
| phase = 1.0 - current / rampup_length | |
| return float(np.exp(-5.0 * phase * phase)) | |
| def linear_rampup(current, rampup_length): | |
| """Linear rampup""" | |
| assert current >= 0 and rampup_length >= 0 | |
| if current >= rampup_length: | |
| return 1.0 | |
| else: | |
| return current / rampup_length | |
| def cosine_rampdown(current, rampdown_length): | |
| """Cosine rampdown from https://arxiv.org/abs/1608.03983""" | |
| assert 0 <= current <= rampdown_length | |
| return float(.5 * (np.cos(np.pi * current / rampdown_length) + 1)) | |