shell脚本长命令带换行 注释方法

shell脚本长命令带换行 注释方法

命令行传参

在训练深度学习网络时,我们每次实验通常会有许多超参数需要设置,如batch size, epoch, gpu id, arch甚至还有一些具体的模型结构等。这事我们通常使用python模块argparse,在命令行进行传参。

比如这样:

# train.py
import argparseparser = argparse.ArgumentParser()
parser.add_argument("--batchSize", default=64)
parser.add_argument("--gpu_id", default="0")
parser.add_argument("--split", action='store_true')
config = parser.parse_args()
print(config)# ... your train loop

当然这里为了说明简化了参数的个数,实际的工程中的超参数肯定比这要多得多。这时我们直接在命令行中传参并运行:

python train.py --batchSize 32 --split --gpu_id 1

这样就可以调整每次运行的参数。

shell脚本

超参数还少的时候这样还行,但是面对巨多的超参数,每次实验都手敲参数的话未免太麻烦了。所以,稍微进阶一点的做法就是用shell脚本的方式将每个参数单行写进去,然后每次只要更改shell脚本中的数值即可。

# train.sh
python train.py \
--batchSize 32 \
--split \
--gpu_id 1

然后我们每次实验的时候只需更改shell脚本中的值,然后再命令行中sh train.sh即可。

我们通过输出验证一下是否传参成功:

Namespace(batchSize='32', gpu_id='1', split=True)	

注意事项

注意使用多换行的shell脚本时有两个注意事项:

  1. 每个换行\后面不能有空格,必须直接跟回车。
  2. 最后一行参数不要有换行符。

具体可以看这篇博客:shell error- unrecognized arguments- \

注释单行

对于action='store_true'型的参数,我们知道有这个参数,则python程序中该值会直接为True,没有则值为False。那我们根据在实验中需要这个值为TrueFalse,就在shell脚本有时希望有这个参数,有时希望没有。

由于我们又不想改变各个参数再shell脚本中的位置,所以最好不要直接删掉那一行。那么在shell脚本最中最直接的想法就是直接单行注释掉这一行,让我们先来试一下直接注释能不能行。

# train.sh
python test.py \
--batchSize 32 \
# --split \
--gpu_id 1 \

我们运行sh train.sh试一下,输出如下:

Namespace(batchSize='32', gpu_id='0', split=False)
test.sh: 4: test.sh: --gpu_id: not found

出大问题,报错了。其实运行py程序的命令是成功运行了的,因为输出了Namespace,但是我们发现我们设置的--gpu_id 1参数没有传进去。而且后面又报了未找到--gpu_id命令的问题。原因很明显了:由于多了一个换行,系统将换行之后的参数当作了一个新命令

解决方法是用 反引号`(backtick) 来包裹我们的注释,就不会破坏掉脚本的语义了,能够正确解析执行:

# train.sh
python test.py \
--batchSize 32 \
`# --split` \
--gpu_id 1 \

再次尝试sh train.sh,输出:

Namespace(batchSize='32', gpu_id='1', split=False)

只将split置为False,其他传参正常,成功解决。

Ref:

https://www.jb51.net/article/165139.htm

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php对中英文字符串进行截取,利用php怎么对中英文混合的字符串进行截取

利用php怎么对中英文混合的字符串进行截取发布时间:2021-01-04 15:31:24来源:亿速云阅读:103作者:Leah利用php怎么对中英文混合的字符串进行截取?很多新手对此不是很清楚,为了帮助大家解决这个难题&#xf…

Linux查找命令find、loacte、whereis、which、type梳理

Linux查找命令find、loacte、whereis、which、type梳理 Linux操作系统中有5种常用的查找命令:find,locate,whereis,which,type,他们分别用于查找不同的东西,本文将就他们各自的功能进行一下梳理…

php数据关系图,如何利用navicat查看数据表的ER关系图

文章背景:(相关推荐:navicat)由于工作需要,现在要分析一个数据库,然后查看各个表之间的关系,所以需要查看表与表之间的关系图,专业术语叫做ER关系图。默认情况下,Navicat显示的界面是这样的&…

Linux软链接的使用

Linux软链接的使用 转自:https://www.cnblogs.com/sueyyyy/p/10985443.html,本博文仅对原博排版稍微优化。 更为细致的硬链接、软链接的介绍可参考:Linux中的硬链接和软链接 另外,提供笔者对软连接的一个最简单的理解&#xff…

oracle死锁优化,Oracle性能优化之LockContention(转)

1、概念DML事务使用row-level locks,查询不会锁定数据。锁有两种模式:exlusive、share。锁的类型:• DML or data locks:– Table-level locks(TM)– Row-level locks(TX)• DDL or dictionary locks一个transaction至少获得两个锁:一个共享的…

Linux中g++与gcc的区别

转自:https://blog.csdn.net/bit_clearoff/article/details/53965514 Windows中我们常用vs来编译编写好的C和C代码;vs把编辑器,编译器和调试器等工具都集成在这一款工具中,在Linux下我们能用什么工具来编译所编写好的代码呢&#…

linux系统可以用迅雷吗,在Linux系统下使用wine运行迅雷5的方法

在Linux系统下使用wine运行迅雷5的方法一、下载ies4linux去 http://www.tatanka.com.br/ies4linux/page/Installation 下载ies4linux的文件包(目前版本为2.99),然后解压缩。注意:这个网站被大陆和谐了,需要跳墙。至于怎么跳,诸位就…

从C源代码到可执行文件的四个过程:预处理、编译、汇编、链接

从C源代码到可执行文件的四个过程:预处理、编译、汇编、链接 总览 我们将在Linux操作系统中,以C语言的Hello World程序为例,用gcc编译器分步执行这四个步骤。 我们有再熟悉不过的HelloWorld程序,hello.c: #include …

uboot引导linux内核,u-boot启动内核的几种方式

1.uboot启动内核的代码缩减如下:s getenv ("bootcmd");debug ("### main_loop: bootcmd\"%s\"\n", s ? s : "");if (bootdelay > 0 && s && !abortboot (bootdelay)){run_command (s, 0);}2.假设boot…

跟我一起写makefile: 概述、介绍、规则

跟我一起写makefile 概述、介绍、规则 转自:https://seisman.github.io/how-to-write-makefile/rules.html 概述 什么是makefile?或许很多Windows的程序员都不知道这个东西,因为那些Windows的集成开发环境(integrated developm…

linux内核中cent文件夹,Centos 中如何快速定制二进制的内核 RPM 包

1、rpm 制作前的环境准备:yum install -y ncurses-devel qt-devel rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed xmlto audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel newt-devel python-devel zlib-devel bc2、准…

TabError- inconsistent use of tabs and spaces in indentation 查验及解决方法

TabError: inconsistent use of tabs and spaces in indentation 查验及解决方法 报错代码 def eccv16(pretrainedTrue):model ECCVGenerator()if(pretrained):import torch.utils.model_zoo as model_zoomodel.load_state_dict(torch.load(/home/ps/.cache/torch/hub/check…

linux用xshell编辑文件,Linux远程管理器xshell和xftp使用教程

Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xftp 是一个基于 MS windows 平台的功能强大的SFTP、FTP 文件传输软件。安装完毕后打开xshell设置网站帐号信息设置主机信息设置服务器帐号设置字符集编码设置好了…

strict=False 但还是size mismatch for []: copying a param with shape [] from checkpoint,the shape in cur

strictFalse 但还是size mismatch for []: copying a param with shape [] from checkpoint,the shape in cur 问题 我们知道通过 model.load_state_dict(state_dict, strictFalse)可以暂且忽略掉模型和参数文件中不匹配的参数,先将正常匹配的参数从文件中载入模…

linux中权限765啥意思,Linux中的文件权限

Linux系统中的每一个文件都与多种权限类型相关联。在这些权限中,我们主要和三类权限打交道:用户(user)、用户组(group)和其他用户(others)。用户是文件的所有者;用户组是指和文件所有者在同一组的其他多个用户的集合;其他用户是除…

CV中的色彩空间大全

HSI、HSV、RGB、CMY、CMYK、HSL、HSB、Ycc、XYZ、Lab、YUV颜色模型 HSV颜色空间 HSV(hue,saturation,value)颜色空间的模型对应于圆柱坐标系中的一个圆锥形子集,圆锥的顶面对应于V1. 它包含RGB模型中的R1,G1,B1 三个面,所代表的…

linux 系统调用时怎么知道当前上下文属于那个进程,linux – 编写系统调用来计算进程的上下文切换...

如果您的系统调用只应报告统计信息,则可以使用内核中已有的上下文切换计数代码.struct rusage {...long ru_nvcsw; /* voluntary context switches */long ru_nivcsw; /* involuntary context switches */};您可以通过运行来尝试:$/usr/bin/time -v /bin/ls -R....V…

linux串口缓冲区的大小,linux-----------串口设置缓冲器的大小

转自:http://stackoverflow.com/questions/10815811/linux-serial-port-reading-can-i-change-size-of-input-bufferYou want to use the serial IOCTL TIOCSSERIAL which allows changing both receive buffer depth and send buffer depth (among other things). The maximum…

FLOPs、FLOPS、Params的含义及PyTorch中的计算方法

FLOPs、FLOPS、Params的含义及PyTorch中的计算方法 含义解释 FLOPS:注意全大写,是floating point operations per second的缩写(这里的大S表示second秒),表示每秒浮点运算次数,理解为计算速度。是一个衡量…

设置中文linux输入ubuntu,Linux_ubuntu怎么设置成中文?ubuntu中文设置图文方法,  很多朋友安装ubuntu后,发 - phpStudy...

ubuntu怎么设置成中文?ubuntu中文设置图文方法很多朋友安装ubuntu后,发现都是英文,看不懂要怎么办?其实ubuntu是可以设置成中文的,下文小编就为大家带来ubuntu中文的设置方法,一起去看下设置方法吧。ubuntu中文设置方…