跑深度学习实验-shell脚本,tmux,pycharm小技巧

最近项目组开始进入写论文的阶段,开始疯狂做实验了,不像之前的只是做一两组实验看效果,现在光数据集就准备了4种,要跑的实验也多起来了,把最近学到的跑实验的小技巧总结一下,以后记得使用。

1.写一个shell脚本跑实验

使用shell脚本跑实验的好处就是可以通过一个文件就把好几组的测试组跑完,不需要每过几十分钟就去看一下,跑新的实验,弄的人很烦躁。具体怎么使用shell脚本来跑实验呢?以我目前跑的音频对抗样本的实验为例:

#!/bin/bash                    # 定义使用哪种sh解释器来解释脚本
start_time=$(date +%s)   #记录开始时间

'''下面就是一组实验中所需要设置的参数,输入,要转换的目标句子,输出,实验结果的存储,确定使用的gpu块'''
python3 attack_pgd_modify_partial.py --in ./dataset/maestro_wav/maestro15.wav \  
./dataset/maestro_wav/maestro82.wav \
./dataset/maestro_wav/maestro13.wav \
./dataset/maestro_wav/maestro23.wav \
./dataset/maestro_wav/maestro80.wav \
./dataset/maestro_wav/maestro67.wav \
./dataset/maestro_wav/maestro31.wav \
./dataset/maestro_wav/maestro45.wav \
./dataset/maestro_wav/maestro7.wav \
./dataset/maestro_wav/maestro70.wav \
		--target "down below in the darkness were hundreds of people sleeping in peace"\
		--out ./dataset_adv/ddataset_pgd_partial/mae/maestro15.wav \
./dataset_adv/ddataset_pgd_partial/mae/maestro82.wav \
./dataset_adv/ddataset_pgd_partial/mae/maestro13.wav \
./dataset_adv/ddataset_pgd_partial/mae/maestro23.wav \
./dataset_adv/ddataset_pgd_partial/mae/maestro80.wav \
./dataset_adv/ddataset_pgd_partial/mae/maestro67.wav \
./dataset_adv/ddataset_pgd_partial/mae/maestro31.wav \
./dataset_adv/ddataset_pgd_partial/mae/maestro45.wav \
./dataset_adv/ddataset_pgd_partial/mae/maestro7.wav \
./dataset_adv/ddataset_pgd_partial/mae/maestro70.wav \
		--restore_path deepspeech-0.4.1-checkpoint_rename/model.v0.4.1 --iterations 500 --res_file "./tmp/res_pgd_partial_mae500.txt" --gpu 1

接下来,就是重复上面一组实验的过程,替换其中的输入,输出,来构造多组实验:
跑深度学习实验-shell脚本,tmux,pycharm小技巧_第1张图片
最后,再添加实验都跑完的结束标志:

end_time=$(date +%s)
cost_time=$[ $end_time-$start_time ]
echo "build kernel time is $(($cost_time/60))min $(($cost_time%60))s"

这样一个shell脚本就完成了,接下来就是我们怎么运行这个shell脚本来跑我们预设好的实验,以上面这个名为:pgd_partial_mae500的shell脚本为例:
在这里插入图片描述
即,找到该.sh文件所在的文件夹,在其中执行命令:bash ./文件名.sh

2.tmux的使用

当可以熟练运用shell脚本来跑实验之后,还有一个问题就是当有多组不同的参数设置的实验时如何实现并行操作,我们可以使用tmux来提高效率,同时跑几个shell脚本,tmux可以称为linux上的终端复用神器了。
主要要用到的tmux操作有如下几个:

tmux new -s xxx  #新建一个终端窗体(伪终端)用来执行新的shell脚本,其中xxx为所设置的这个新窗体的名字,通常以你要跑的文件的名字命名

以要执行一个pgd_ps_mae50.sh文件为例:
先创建一个新窗体:
在这里插入图片描述
创建成功之后,会直接跳到这个窗体之中,在这里面进行执行bash ./pgd_ps_mae50.sh
跑深度学习实验-shell脚本,tmux,pycharm小技巧_第2张图片
当我们输入了对应的执行指令,现在想要开始跑第二个shell脚本实验,那就要先跳出这个窗体,回到我们真正的终端,通过ctrl+b d指令跳回一开始的终端。需要注意的是这实际上是两个步骤,ctrl+b然后再输入d跳回。

那么,当过去了一段时间,我们想看一看程序跑完了没,怎么再回到之前的窗体中去呢?这时候我们引入第二个tmux命令:

tmux attach -t XXX #这条指令的意思就是由终端进入之前曾经创建好的窗体中去,如果xxx窗体不存在会报错

在这里插入图片描述
跑深度学习实验-shell脚本,tmux,pycharm小技巧_第3张图片
检查之后,发现程序已经跑完了,接下来我们就需要对这个窗体进行处理:
首先,回到终端,通过tmux ls来对已创建的窗体进行一个遍历查看:
跑深度学习实验-shell脚本,tmux,pycharm小技巧_第4张图片
发现我们刚刚创建的那个pgd_ps_mae50的窗体还在,而我们又用不到它了,这时候通过tmux的kill操作来删除它:

tmux kill-session -t XXX 

执行之后,通过ls可以看到刚刚新建的窗体已经删除了:
在这里插入图片描述
跑深度学习实验-shell脚本,tmux,pycharm小技巧_第5张图片

3.pycharm快捷键

因为要经常的替换参数,所以能够一起替换是最好的了,下面两个命令不止在pycharm中,很多软件中也很常用:
ctrl/command + f 搜索
ctrl/command + r 批量替换

你可能感兴趣的:(经验技巧)