一.设置脚本参数
1. 代码示例
在完整的模型训练代码中,我们时常能看到通过python train.py --params 来训练模型,这也是在无UI界面的服务器上训练模型最主要的方法,因此使用脚本并设置脚本参数尤为重要.
我们通常会将脚本设置的代码写在config,py中,再用训练主函数main.py进行函数调用:
from config import return_argsdef main():args = return_args()
由此我们可以节省主函数的空间,将代码写在config.py:
import argparseparser = 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
在科幻小说《银河系漫游指南》中被设定为“生命、宇宙以及任何事物的终极答案”。但实际上,你可以选择任何你喜欢的数字作为随机种子。只要随机种子相同,那么生成的随机数序列就会相同。这对于确保实验的可重复性非常有用。