chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
from prml.nn.network import Network
|
||||
|
||||
|
||||
class Optimizer(object):
|
||||
"""
|
||||
Optimizer to train neural network
|
||||
"""
|
||||
|
||||
def __init__(self, parameter, learning_rate):
|
||||
"""
|
||||
construct optimizer
|
||||
Parameters
|
||||
----------
|
||||
parameter : list, dict, Network
|
||||
list of parameter to be optimized
|
||||
learning_rate : float
|
||||
update rate of parameter to be optimized
|
||||
Attributes
|
||||
----------
|
||||
n_iter : int
|
||||
number of iterations performed
|
||||
"""
|
||||
if isinstance(parameter, Network):
|
||||
parameter = parameter.parameter
|
||||
if isinstance(parameter, dict):
|
||||
parameter = list(parameter.values())
|
||||
self.parameter = parameter
|
||||
self.learning_rate = learning_rate
|
||||
self.n_iter = 0
|
||||
|
||||
def cleargrad(self):
|
||||
for p in self.parameter:
|
||||
p.cleargrad()
|
||||
|
||||
def set_decay(self, decay_rate, decay_step):
|
||||
"""
|
||||
set exponential decay parameters
|
||||
Parameters
|
||||
----------
|
||||
decay_rate : float
|
||||
dacay rate of the learning rate
|
||||
decay_step : int
|
||||
steps to decay the learning rate
|
||||
"""
|
||||
self.decay_rate = decay_rate
|
||||
self.decay_step = decay_step
|
||||
|
||||
def increment_iteration(self):
|
||||
self.n_iter += 1
|
||||
if hasattr(self, "decay_rate"):
|
||||
if self.n_iter % self.decay_step == 0:
|
||||
self.learning_rate *= self.decay_rate
|
||||
Reference in New Issue
Block a user