torch.optim
基类class Optimizer(object)
Optimizer是所有optimizer的基类。
调用任何优化器都要先初始化Optimizer类,这里拿Adam优化器举例子。Adam optimizer的init函数如下所示:
1 | class Adam(Optimizer): |
上述代码将学习率lr,beta,epsilon,weight_decay,amsgrad等封装在一个dict中,然后将其传给Optimizer的init函数,其代码如下:
1 | class Optimizer(object): |
从这里可以看出来,每个pytorch给出的optimizer至少有以下三个属性和四个函数:
属性:
- self.defaults # 字典类型,主要包含学习率等值
- self.state # defaultdict(<class ‘dict’>, {}) state存放的是
- self.param_gropus # <class ‘list’>:[],prama_groups是一个字典类型的列表,用来存放parameters。
函数:
- self.zero_grad() # 将optimizer中参数的梯度置零
- self.step() # 将梯度应用在参数上
- self.state_dict() # 返回optimizer的state,包括state和param_groups。
- self.load_state_dict() # 加载optimizer的state。
- self.add_param_group() # 将一个param group添加到param_groups。可以用在fine-tune上,只添加我们需要训练的层数,然后其他层不动。
如果param已经是一个字典列表的话,就无需操作,否则就需要把param转化成一个字典param_groups。然后对param_groups中的每一个param_group调用add_param_group(param_group)函数将param_group字典和defaults字典拼接成一个新的param_group字典添加到self.param_groups中。