深度学习训练模型时,使用argparse模块以及shell脚本,进行“炼丹”教程

2020-12-13由程序员日记发表于系统教程 浏览42次

目录

我们在训练模型时,经常需要调整batchsize,初始学习率,以及模型中的超参数,以求达到最好的实验效果。如果采用传统操作,即这个模型跑完之后,手动调整模型参数,然后再开始训练模型,显而易见,这种方法费时又费力。下面就介绍一种使用argparse模块以及shell脚本,进行“炼丹”的方式。

一、argparse模块

1.1 参数的定义

argparse模块感觉就是一个全局变量,在运行程序时,如果没有给某个参数赋值,就使用其默认参数。具体定义格式如下,我们需要修改的就是parser.add_argument()里面的部分,第一个引号里面的内容就是该参数的名称,前面加“--”是在程序运行时使用的,在接下去的程序运行中会介绍;dest就是参数的名称;type是参数的类型;default是默认值,如果程序运行时,没有特别说明,就是加载默认参数;help就是对该参数进行说明

import argparse

parser = argparse.ArgumentParser(description='')
parser.add_argument('--epoch', dest='epoch', type=int, default=40, help='# of epoch')
parser.add_argument('--batch_size', dest='batch_size', type=int, default=128, help='# images in batch')
parser.add_argument('--use_gpu', dest='use_gpu', type=int, default=1, help='gpu flag, 1 for GPU and 0 for CPU')
parser.add_argument('--lr', dest='lr', type=float, default=0.0001, help='initial learning rate for adam')
parser.add_argument('--C', dest='C', default='Resnet', help='choose model')

args = parser.parse_args()

1.2 参数的使用

参数使用很简单,就是在代码中使用args.参数名的形式进行调用

train_data = mydataset.MyDataset_image2(args.train_dir,"train")
    train_data_size=len(train_data)
    if train_data_size % args.batch_size!=0:
        train_data_size = (train_data_size // args.batch_size) * args.batch_size
    train_loader = Data.DataLoader(dataset=train_data, batch_size=args.batch_size, shuffle=True,drop_last=True)

1.3 程序的运行

通常情况下,我们在命令行种,直接使用python train.py 开始训练模型,这时候模型中的参数,都是以default中的默认值进行加载的,为了可以动态的调整某个参数的值,我们可以使用如下方式运行程序

--C ‘Resnet’代表要重新给参数C赋值,值为'Resnet' ; --model_dir 'CheckpointResnet_denoise'则是要给参数model_dir重新赋值'CheckpointResnet_denoise'。

python train.py --C 'Resnet' --model_dir 'CheckpointResnet_denoise'

二、使用Shell脚本炼丹

以上介绍如何在程序运行时,自定义的修改一些参数,接下来,就是如何使用这个方法,结合shell脚本,进行炼丹了。我们在命令行状态下,程序目录下先创立.sh的文件,然后再对这个文件进行编辑,最后使用bash方式运行即可,具体方式如下所示:

2.1 创建test1.sh文件

touch test1.sh

2.2 编辑test.sh文件

vim test1.sh 

此时按i键进入test1.sh文件,此时处于编辑状态,我们就可以在里面编辑运行程序了,第一行代码类似头文件,一定要先写上,然后就是使用argparse模块的方法,来编写启动程序的代码,这样,待会我们运行test1.sh文件时,程序就会在执行完第一个训练后,自动改变参数,执行第二个程序了

#! /bin/bash
python train.py --C 'Resnet' --model_dir 'CheckpointResnet' --train_dir '/datasets/Dset_Jerry/TrainData_Class' --test_dir '/datasets/Dset_Jerry/TestData_Class'
python train.py --C 'Densenet' --model_dir 'CheckpointDensenet' --train_dir '/datasets/Dset_Jerry/TrainData_Class' --test_dir '/datasets/Dset_Jerry/TestData_Class'

2.3 退出编辑状态及保存

编写完毕后,我们需要按ESC键,退出编辑状态,紧接着按shift+:号键,此时test1.sh 就处在命令状态,我们在“:”后面敲出wq, 然后按回车,就可以保存此时的test1.sh文件了

2.4 运行test1.sh文件

接着我们使用如下语句即可进行炼丹啦!

bash test1.sh