pytorch常用函数
目录
调整学习率的方法
state_dict
@函数修饰符
argparse
cvkit
调整学习率的方法
在模型训练的优化部分,调整最多的一个参数就是学习率,合理的学习率可以使优化器快速收敛。
一般在训练初期给予较大的学习率,随着训练的进行,学习率逐渐减小。
等间隔调整学习率
#step_size epoch间隔大小,比如10 在10 20 ..会调整学习率,调整率是gamma
#last_epoch是指上一个epoch
torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1,
last_epoch=-1)
按设定的间隔调整学习率
#milestones(list)-一个list,每一个元素代表何时调整学习率,list元素必须是递增的,
#调整率是gamma
#last_epoch是指上一个epoch
class torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1,
last_epoch=-1)
按指数衰减调整学习率,调整公式: lr = lr * gamma**epoch
以余弦函数为周期,并在每个周期最大值时重新设置学习率
当某指标不再变化(下降或升高),调整学习率
#step_size epoch间隔大小,比如10 在10 20 ..会调整学习率,调整率是gamma
#last_epoch是指上一个epoch
torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma=0.1,
last_epoch=-1)
以余弦函数为周期,并在每个周期最大值时重新设置学习率
#last_epoch是指上一个epoch
#T_max(int)- 一次学习率周期的迭代次数,即T_max个epoch之后重新设置学习率。
#eta_min(float)- 最小学习率,即在一个周期中,学习率最小会下降到eta_min,默认值为0
torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0,
last_epoch=-1)
当某指标不再变化(下降或升高),调整学习率
torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min',
factor=0.1, patience=10, verbose=False, threshold=0.0001,
threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08)
#参数
mode(str)- 模式选择,有 min和max两种模式,min表示当指标不再降低(如监测loss),max表示当
指标不再升高(如监测accuracy)
factor(float)- 学习率调整倍数(等同于其它方法的gamma),即学习率更新为 lr = lr *
factor patience(int)- 直译——"耐心",即忍受该指标多少个step不变化,当忍无可忍时,调整学
习率。注,可以不是连续5次。
verbose(bool)- 是否打印学习率信息, print('Epoch {:5d}: reducing learning rate'
' of group {} to {:.4e}.'.format(epoch, i, new_lr))
threshold(float)- Threshold for measuring the new optimum,配合threshold_mode
使用,默认值1e-4。作用是用来控制当前指标与best指标的差异。
cooldown(int)- “冷却时间“,当调整学习率之后,让学习率调整策略冷静一下,让模型再训练一段
时间,再重启监测模式。
min_lr(float or list)- 学习率下限,可为float,或者list,当有多个参数组时,可用list进
行设置。
eps(float)- 学习率衰减的最小值,当学习率变化小于eps时,则不调整学习率
为不同参数组设定不同学习率调整策略。调整规则为,lr = base_lr * lmbda(self.last_epoch) 。
#last_epoch是指上一个epoch
#lr_lambda(function or list)-一个计算学习率调整倍数的函数,输入通常为step,当有多个参
数组时,设为list。
torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1)
state_dict
python的字典对象
将每一层与它的对应参数建立映射关系.(如model的每一层的weights及偏置等等)
只有那些参数可以训练的layer才会被保存到模型的state_dict中,如卷积层,线性层等等)
优化器对象Optimizer也有一个state_dict,它包含了优化器的状态以及被使用的超参数(如lr,
momentum,weight_decay等
state_dict是在定义了model或optimizer之后pytorch自动生成的,可以直接调用.常用的保存
state_dict的格式是 .pt
查看方式:
print("Model's state_dict:")
for param_tensor in model.state_dict():
print(param_tensor, "\t", model.state_dict()[param_tensor].size())
# Print optimizer's state_dict
print("Optimizer's state_dict:")
for var_name in optimizer.state_dict():
print(var_name, "\t", optimizer.state_dict()[var_name])
@函数修饰符
作用是为现有函数增加额外的功能,常用于插入日志、性能测试、事务处理等等。
创建函数修饰符的规则:
修饰符是一个函数
修饰符取被修饰函数为参数
修饰符返回一个新函数
修饰符维护被维护函数的签名
示例
#https://www.cnblogs.com/gdjlc/p/11182441.html
def log(func):
def wrapper():
print('log开始 ...')
func()
print('log结束 ...')
return wrapper
@log
def test():
print('test ..')
test()
#out
log开始 ...
test ..
log结束 ...
argparse
一个Python模块:命令行选项、参数和子命令解析器。
示例:
#创建解析器
parser = argparse.ArgumentParser(description='Net train')
#添加参数
parser.add_argument('--imw', default=256, type=int)
parser.add_argument('-a',--accelerated', action="store_true", default=False)
#参数解析
args = parser.parse_args()
#参数使用
print(args.imw)
cvkit
pfm格式文件查看工具
cvkit:https://vision.middlebury.edu/stereo/code/
