学习笔记(FRN——trainer.py)

记录一行行看代码baidu的知识点。

一、引用

sys.path.append(r'E:\桌面文件\代码\FRN-main\FRN-main\trainers')
from eval import meta_test
  •  引用 eval.py 文件中的 meta_test 函数。需要正确导入。

二、logging模块(输出运行日志)

formatter = logging.Formatter(
    "[%(asctime)s] %(message)s",datefmt='%m/%d %I:%M:%S')
logger = logging.getLogger()
logger.setLevel(logging.INFO)
  • Formatter是一个格式化器:输出日志记录的布局/格式。
  • %(asctime)s创建日志记录时的时间,形式:2024-1-22 13:50。
  • %(asctime)s已经记录的消息。datefmt=' ' 时间。
  • logger = logging.getLogger():实例化,创建一个logger日志对象。
  • setLever():设置日志记录级别。
  • logging.INFO输出日志的信息,程序正常运行产生的信息。
fh = logging.FileHandler(filename,"w")
fh.setFormatter(formatter)
logger.addHandler(fh)
  • FileHandler():将日志信息输入到磁盘文件filename上。 
  • 比较:StreamHandler()能够将日志信息输出到sys.stdout, sys.stderr 或者类文件对象(更确切点,就是能够支持write()和flush()方法的对象)
  • setFormatter():自定义日志格式 
  • addHandler():logger日志对象加载FileHandler对象

三、argparse模块

用来设置参数,是Python模块:命令行选项、参数和子命令解析器。

parser = argparse.ArgumentParser()

parser.add_argument("--opt",help="optimizer",choices=['adam','sgd'])
parser.add_argument("--stage",help="number lr stages",type=int,default=30)
parser.add_argument("--gpu",help="gpu device",type=int,default=0)
1、创建解析器
  • parser = argparse.ArgumentParser()
  • 创建一个ArgumentParser对象
  • ArgumentParser包含将命令行解析成Python数据类型所需的全部信息
2、添加参数
  • parser.add_argument('--sum'......)
  • 给一个ArgumentParser添加程序参数信息是通过调用add_argument()方法完成的。
3、解析参数
  • parser.parse_args()
4、add_argument() 方法
  • help: 一个此选项作用的简单描述
  • type:命令行参数应当被转换成的类型
  • defualt:当参数未在命令行中出现时使用的值
  • choices:可用的参数的容器
  • action:当参数在命令行中出现时使用的动作基本类型 
  • name or flags:一个命名或者一个选项字符串的列表,例如 foo 或 -f, --foo

四、optimizer和scheduler

optimizer = torch.optim.Adam(model.parameters(),lr=args.lr,weight_decay=args.weight_decay)
  • model.parameters():模型的参数。
  • lr:学习率,默认值是0.001,控制每次参数更新的步长。
  • weight_decay:权重衰减,也称L2正则化项,默认值是0, 控制参数的幅度,防止过拟合。
optimizer = torch.optim.SGD(model.parameters(),lr=args.lr,momentum=0.9,weight_decay=args.weight_decay,nesterov=args.nesterov)
  • SGD随机梯度下降
  • momentum(动量):用过去梯度的moving average来更新参数,加快梯度下降的速度。
  • nesterov:Momentum的变种。与Momentum唯一区别就是,计算梯度的不同。Nesterov动量中,先用当前的速度临时更新一遍参数,再用更新的临时参数计算梯度。
scheduler = optim.lr_scheduler.MultiStepLR(optimizer,milestones=args.decay_epoch,gamma=args.gamma)
  • MultiStepLR:按需调整学习率。
  • milestones:每个元素代表何时调整学习率。
  • gamma:学习率调整倍数,默认为 0.1 倍,即下降 10 倍。
scheduler = optim.lr_scheduler.StepLR(optimizer,step_size=args.epoch,gamma=args.gamma)
  • StepLR:等间隔调整学习率。
  • step_size:学习率下降间隔数,若为 30,则会在 30、 60、 90…个 step 时,将学习率调整为 lr*gamma。
  • last_epoch:上一个 epoch 数,这个变量用来指示学习率是否需要调整。当last_epoch 符合设定的间隔时,就会对学习率进行调整。当为-1 时,学习率设置为初始值。

五、seed

设置随机种子是为了确保每次生成固定的随机数,这就使得每次实验结果显示一致了,有利于实验的比较和改进。使得每次运行该 .py 文件时生成的随机数相同。

seed = args.seed
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
  • torch.manual_seed(seed):为CPU设置种子,生成随机数。
  • torch.cuda.manual_seed(seed):为特定GPU设置种子,生成随机数。
np.random.seed(seed)
torch.cuda.set_device(args.gpu)
  • np.random.seed(seed):生成指定随机数。
  • cuda.set_device():把模型和数据加载到对应的GPU

  • 26
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值