手撸AI-3: 设置脚本参数与设置随机种子

一.设置脚本参数

1. 代码示例

        在完整的模型训练代码中,我们时常能看到通过python train.py --params 来训练模型,这也是在无UI界面的服务器上训练模型最主要的方法,因此使用脚本并设置脚本参数尤为重要.

        我们通常会将脚本设置的代码写在config,py中,再用训练主函数main.py进行函数调用:

from config import return_args

def main():
    args = return_args()

        由此我们可以节省主函数的空间,将代码写在config.py:

import argparse

parser = argparse.ArgumentParser(description='Dogs VS Cats Classification')
parser.add_argument('--DIR', default='..', help='dataset location')
parser.add_argument('--split_ratio', type=float, default=0.8,
                    help='default setting. train : val = 8 : 2')

parser.add_argument('--epochs', type=int, default=5, help='number of epochs')
parser.add_argument('-b', '--batch-size', default=32,
                    type=int, help='mini-batch size, 8.7G memory per gpu with bs32, swinB 224')
parser.add_argument('--lr', '--learning-rate', default=1e-5, type=float,
                    metavar='LR', help='initial learning rate', dest='lr')
parser.add_argument('-j', '--workers', default=4, type=int, metavar='N',
                    help='number of data loading workers (default: 32)')
parser.add_argument('--seed', default=42, type=int,
                    help='seed for initializing training. ')

parser.add_argument('-p', '--print_freq', default=10, type=int, metavar='N',
                    help='print frequency')
parser.add_argument('-s', '--save', action='store_true',
                    help='save best model')
parser.add_argument('--checkpoint', default=None, type=str,
                    help='load model for testing')

def return_args():
    args = parser.parse_args()
    return args

二.设置随机种子

1.代码示例

        在深度学习实验中,由于初始化权重、数据洗牌、Dropout等操作的随机性,同一份代码可能会得到不同的结果。为了使实验结果可复现,我们通常会设置一个固定的随机种子,这样每次运行实验时,所有的随机操作都会有相同的结果。注意,尽管设置了随机种子可以提高实验的可复现性,但在某些情况下(例如使用多线程或特定的GPU操作)仍可能会有一些随机性。

if args.seed is not None:  # 如果提供了随机种子
    random.seed(args.seed)  # 为Python内置的随机库设置种子
    np.random.seed(args.seed)  # 为NumPy的随机库设置种子
    torch.manual_seed(args.seed)  # 为PyTorch的CPU随机库设置种子
    torch.cuda.manual_seed_all(args.seed)  # 为PyTorch的所有GPU随机库设置种子
    cudnn.deterministic = True  # 为CuDNN库设置确定性模式,这可以确保每次运行网络时相同输入会有相同输出

2.random.seed(42)中42是什么意思?

        在这里,42是一个随机种子(random seed)。随机种子是用于初始化一个随机数生成器的数字。通过设置随机种子,我们可以确保每次运行程序时,随机数生成器产生的随机数序列是一样的,从而使得程序的运行结果具有可重复性。

        为什么选择42作为随机种子呢?这其实没有特别的原因,42只是一个常用的随机种子。在某些情况下,人们可能会选择42作为随机种子,因为42在科幻小说《银河系漫游指南》中被设定为“生命、宇宙以及任何事物的终极答案”。但实际上,你可以选择任何你喜欢的数字作为随机种子。只要随机种子相同,那么生成的随机数序列就会相同。这对于确保实验的可重复性非常有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值