每次训练自动备份源码的脚本

我们运行深度学习任务时,常常要改改代码就跑个实验,同时跑很多个,时间久了可能会忘记 TensorBoard 上相应的训练任务都改了什么。
这种情况下,记录下每次运行任务时的源码状态就变得非常有必要。这里有很多方法,比如用git保存相应版本之类的。由于通常情况下深度学习的代码文件都非常少(可能也就几十kb),我这里给出一个最简单粗暴的方法:每次将特定扩展名的文件自动备份到另一个目录。

1 脚本源码

直接给出脚本源码,我这里保存其为 train.sh

2 实现功能

这个脚本非常简单,就是实现了以下一些功能:

  • 新建一个备份目录:路径为 ../当前目录名_backups/系统时间/
  • 其中使用系统时间作为目录名是为了防止重名,格式为:年-月-日-时-分-秒,我们默认为不会出现1s中多个同时运行情况,相对应的代码是:

  • 拷贝指定扩展名的文件到备份目录:这些文件会保持原有的目录结构
  • 相对应代码为:

  • 运行相应训练脚本,将系统时间作为 --time 参数传入:脚本后的参数会原封不动传给你的训练文件
  • 相对应代码为,这里面我们默认训练是调用 python train.py [args]。请根据你的需要进行相应修改:

3 修改 TensorBoard 日志路径(可选)

为了你刚才保存的训练代码能够和 TensorBoard 中的实验尽快对应,可以采用如下方式在你保存 TensorBoard 路径中也加入日期后缀。
例如下面的方式,请参考进行修改(我们这里假设只有一个参数 exp_id 以及我们附加的参数 --time):

4 使用方法

使用方法也非常简单,比如你之前用这样训练:

就改成这样训练:

这样你就会看到指定的备份目录下保存了你的主要源码:

同时在你的 TensorBoard 下也相应地在日志路径后增加了日期,有需要回溯时,可以用这个作为你的索引快速找到你备份的源代码:

PS:
这一方法比较简单粗暴,只能适合代码量比较小的时候。当然对于没什么用的备份还是要及时删除的。

如果大家有什么更加简洁优雅的记录实验文件的方式,欢迎留言哦~

Add a Comment

Your email address will not be published.