在调试代码的时候,我们很多时候都忘记我们上次做了哪些改进,这样在做ablation实验的时候很乱,没有条理。这里借鉴python中的report包(可能python3.x以后就没法用了)来自动将每次实验的代码保存下来方便比较。
我们这里使用的是report.export_sources函数:
# Copyright (c) 2016, NVIDIA Corporation
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of NVIDIA Corporation nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
def export_sources(target_dir):
os.makedirs(target_dir)
for ext in ('py', 'pyproj', 'sln'):
for fn in glob.glob('*.' + ext):
shutil.copy2(fn, target_dir)
if os.path.isdir('src'):
for fn in glob.glob(os.path.join('src', '*.' + ext)):
shutil.copy2(fn, target_dir)
注意,在使用这个函数的时候需要引用几个包:
import glob
import shutil
import os
比如我们可以这样用:
export_sources(os.path.join(log_dir, 'src'))
这样就可以在你指定的文件夹下面看到你之前做了修改的文件。以后可以放心的改代码,每次跑的时候都会保存下来你改过的文件。
声明
本代码段copy自python官方的report包。代码段最开始的注释为了声明NVIDIA的版权。