参考:
- 命令行运行Python脚本时传入参数–3种方法
x.1 sys.argv
sys.argv类似于c中main函数中的argv,存储了用户的输入信息。
当你用bash,在shell或者terminal中运行脚本时,你的参数其实传到了sys.argv里面。sys.argv是一个数组,它记录了你在命令行中的输入,并以空格作为分隔符,以字符串形式进行存储。
案例如下:
# test.py
import sys
print(sys.argv)
# bash
>> python test.py 2323
>> ['test.py', '2323']
x.2 argparse.py 使用
argparse 将从sys.argv中翟信息,或者让用户自己生成信息以供程序执行,合理运用argparse,能够让你的程序更容易配置和运行,一些常用的arguments如下:
argparse案例如下:
我们使用argparse.ArgumentParse()
生成parser;用parser.add_argument('-key', default='value', type=str, required=False)
添加参数,在parser中以键值对方式存储信息;用args=parser.parse_args()
生成参数并将args返回。
在别的函数中调用则以args.data_path
进行调用。
def parse_args():
import argparse
parser = argparse.ArgumentParser(description="pytorch unet training")
parser.add_argument("--data-path", default="./", help="DRIVE root")
# exclude background
parser.add_argument("--num_classes", default=1, type=int)
parser.add_argument("--device", default="cuda", help="training device")
parser.add_argument("-b", "--batch-size", default=4, type=int)
parser.add_argument("--epochs", default=200, type=int, metavar="N",
help="number of total epochs to train")
parser.add_argument('--lr', default=0.01, type=float, help='initial learning rate')
parser.add_argument('--momentum', default=0.9, type=float, metavar='M',
help='momentum')
parser.add_argument('--wd', '--weight-decay', default=1e-4, type=float,
metavar='W', help='weight decay (default: 1e-4)',
dest='weight_decay')
parser.add_argument('--print-freq', default=1, type=int, help='print frequency')
parser.add_argument('--resume', default='', help='resume from checkpoint')
parser.add_argument('--start-epoch', default=0, type=int, metavar='N',
help='start epoch')
parser.add_argument('--save-best', default=True, type=bool, help='only save best dice weights')
# Mixed precision training parameters
parser.add_argument("--amp", default=False, type=bool,
help="Use torch.cuda.amp for mixed precision training")
args = parser.parse_args()
return args
if __name__ == '__main__':
args = parse_args()
args.data_path
上面的代码和在shell中直接键入如下命令是一样的:
python parse_args.py --data-path=./ --num_classes=1
# or the following is okay
python parse_args.py --data-path ./ --num_classes 1
后面的部分内容省略了,但是效果是一样的。
你需要注意的是如果你写的是--data-path, --num_classes
则你在命令行传参就得是--data-path, --num_classes
,得一模一样,虽然在代码中访问args中参数的时候就得用args.data_path
。所以我们建议参数全部以类似--data_path
的方式命名。
需要注意,你的argparse.ArgumentParser(description="pytorch unet training")
函数不论是封装在if __name__=="__main__"
中还是一个函数parse_args()
中,都是可以通过在.py文件后面的terminal中的键入参数的操作来读入参数的,如python parse_args.py --data-path=./ --num_classes=1
。
需要注意,使用该方法从命令行增加的参数需要在.py
文件后添加,在前面添加是读取不到的。即不能python --data-path=./ parse_args.py
x.3 os.environ
系统环境变量存储在os.environ
中,以dict的键值对的方式实现存储,可以通过访问os.environ
这个字典的键值对来访问系统环境变量。
x.4 杂鱼碎碎念
x.4.1 非
python的非结构通过not
关键字实现,即c中!=
通过not
实现。
if not os.path.exists("/home/yingmuzhi/_weight"):
os.mkdir("/home/yingmuzhi/_weight")
x.4.2 os.cpu_count()
os.cpu_count()
返回CPU线程数,即number of workers。
# linux下查看cpu核心数
1.查看CPU个数
cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l
2.查看每个物理CPU含有的核心个数
cat /proc/cpuinfo |grep "cpu cores"|uniq|wc -l
3.查看每个CPU核心含有的线程数
cat /proc/cpuinfo |grep "processor"|wc -l
x.4.3 python 中的?问号运算符
python 中的问号运算符如下:
batch_size = batch_size if batch_size > 1 else 0
# 也可以直接这么玩,在list当中取最小
minimum = min([2, 3, batch_size if batch_size > 1 else 0, 4])