目录
调整学习率的方法
在模型训练的优化部分,调整最多的一个参数就是学习率,合理的学习率可以使优化器快速收敛。
一般在训练初期给予较大的学习率,随着训练的进行,学习率逐渐减小。
等间隔调整学习率
#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/