查看原文
其他

【​他山之石】深度学习工程技巧之网格调参

“他山之石,可以攻玉”,站在巨人的肩膀才能看得更高,走得更远。在科研的道路上,更需借助东风才能更快前行。为此,我们特别搜集整理了一些实用的代码链接,数据集,软件,编程技巧等,开辟“他山之石”专栏,助你乘风破浪,一路奋勇向前,敬请关注。

作者:知乎—孟paper

地址:https://www.zhihu.com/people/meng-yan-shi

编写完深度学习的代码框架后,各类超参数如何确定一直都是个见仁见智的问题。对于不同数据集规模、不同batch_size等对应的学习率、优化器等都可能不同。
那如何找到这一组最优的参数呢?为每种可能的参数跑一组实验也许是一个可行的方案。而手动去运行每组参数又过于麻烦。
为了解决这个问题,可以借助tmux来完成。先生成可能的command,然后将这些command发送给tmux。这样我们可以一次性启动多组实验。同时试验运行过程中可以进tmux观测每个command的运行结果。
实验上面的功能并不复杂,只需要依赖libtmux 这个python库。下面给出具体实现
def grid_search(command_dict, tmux_name='search'): server = libtmux.Server() sess = server.new_session(tmux_name)
for i, (name, command_) in enumerate(command_dict.items()): if i == 0: window = sess.windows[-1] else: window = sess.new_window() window.rename_window(name) pane = window.panes[0] pane.send_keys(command_)
def search_lr(): """搜索最优学习率 """ devices = [1, 3, 4] command_dict = {} for i, lr in enumerate([1e-6, 1e-5, 1e-4]): name = f'lr_{lr}' command_dict[name] = f'CUDA_VISIBLE_DEVICES={devices[i]} python train.py train train.lr {lr} output_dir ../outputs/grid_attr_lr_{lr}' grid_search(command_dict, 'search_lr')
search_lr()
grid_search函数提供了这个抽象过程。使用时,只需要提供每个实验的名字和指令的字典给这个函数即可。这样同时启动了3个程序用于寻找最优的学习率。对应的tmux如下
这样的调参方法优势十分明显。看tensorboard输出
绿色线肉眼可见优于其他结果,从而找到最优的学习率参数。
当然这只是第一步。考虑到我们的显卡是有限的,同时运行的程序不能超过显卡数量。后续考虑支持实现一个进程池,当显卡被释放时自动运行下一个指令,从而实现周一一次性跑上100个实验,周日直接回来看结果。

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“他山之石”历史文章


更多他山之石专栏文章,

请点击文章底部“阅读原文”查看



分享、点赞、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存