知行编程网知行编程网  2022-05-25 17:00 知行编程网 隐藏边栏 |   抢沙发  18 
文章评分 0 次,平均分 0.0

Deep Learning 效率神器,节省你的大量时间

来自 | 知乎 
链接 | https://www.zhihu.com/question/384519338
编辑 | 深度学习这件小事
本文仅作学术分享,如有侵权,请联系删除
Deep Learning 效率神器,节省你的大量时间

   weights&bias


分享自:Fing

stay full, stay foolish
https://www.zhihu.com/question/384519338/answer/1160886439
著作权归作者所有。


wandb,weights&bias,最近发现的一个神库。

深度学习实验结果保存与分析是最让我头疼的一件事情,每个实验要保存对应的log,training curve还有生成图片等等,光这些visualization就需要写很多重复的代码。跨设备的话还得把之前实验的记录都给拷到新设备去。

wandb这个库真是深得我心,只要几行代码就可以把每一次实验打包保存在云端,而且提供了自家的可视化接口,不用每次都自己写一个logger,也省掉了import matplotlib, tensorboard等一大堆重复堆积的代码块。

最关键的是,它是免费的:)

链接:https://github.com/wandb/client


   PyTorch Lightning


分享自:Jeremy Zhou

https://www.zhihu.com/question/384519338/answer/1152322804
著作权归作者所有。


推荐一个基于PyTorch的Deep Learning框架PyTorch Lightning

链接:https://github.com/PyTorchLightning/pytorch-lightning

经过我的试用,这个框架现在优点很多,使用方便,节省大量时间,让用户只需要关注模型和数据。

1. 不再需要关注很多无关但必要的繁杂细节,例如控制训练流程、保存模型checkpoint、fp16支持、多机多卡训练、梯度累计等等。这些东西全部由框架实现。

2. 对于一般的模型训练,只需要关注模型设计和数据读取。模型部分就不谈了。对于数据读取,除了具体的读数据,只需要写一个如何将多个instance打包成一个batch的函数即可。

3. 扩展性强。这是我认为这个框架最优秀的地方。PyTorch实际上有很多不同的框架,但是增加的易(无)用(脑)性的同时,其扩展性往往大打折扣。PyTorch Lightning对于这点的处理很好。可能某高级炼金术师不止需要控制模型设计和数据读取,而是想要进行更精细的控制,例如学习率的自定义调节。PyTorch Lightning也通过hook的方式提供了支持,几乎所有常见的可以插入自定义控制流程的地方都可以使用hook进行更精细的控制。

Deep Learning 效率神器,节省你的大量时间

下面说说缺点:

1. 老生常谈的第一点,对于某些国家炼金术师,他们想要控制每一个细节,那么PyTorch Lightning可能无法提供支持。但是我觉得这些人也没必要用这个,自己从头写最好了。

2. 框架还处于高频更新中,可能前后版本存在兼容性问题。甚至有一些小坑。


   Alfred


分享自:金天

中南大学 控制科学与工程硕士

https://www.zhihu.com/question/384519338/answer/1150941204
著作权归作者所有。

谢药。

来推广一波我的Alfred库,首先请大家pip安装一波:

<section style="margin-left: 8px;margin-right: 8px;"><br  /></section>
然后是Github链接:

https://github.com/jinfagang/alfred

这个库目前有143个star,30个fork,看完觉得有用的老铁记得回过头来三连(疯狂暗示)。

alfred是什么


这是个啥库?这里贴一个github官方的定义:

Deep Learning 效率神器,节省你的大量时间

英文不大好,大概意思是这是一个lib,同时也是一个tool,你只要安装了上面的命令,你就可以在terminal召唤alfred了!

大家安装完了使一下??

<section style="margin-left: 8px;margin-right: 8px;"><br  /></section>
是不是感觉很顺手?到目前为止大家还是不知道alfred是干啥的。但是你看看-h应该会看到一大堆指令。我感觉alfred里面*最装比,最牛x,最掉炸天的应该是visualize你的任何格式的标注数据*.

曾几何时,我都有这样的需求:我有一堆数据,目标检测或者实力分割的,它是VOC或者coco的format,我每次想可视化一下,看看数据有没有标错,都需要自己写脚本,很麻烦。现在有了alfred,你要可视化VOC,只需要:

<section style="margin-left: 8px;margin-right: 8px;"><br  /></section>
简单吗?只要把图片路径和标注路径穿过去即可。然后你就可以看到了:

Deep Learning 效率神器,节省你的大量时间

就可以可视化出来了。请注意,你标注和图片放在同一个文件夹也是可以的噢,很鲁帮性的哦。

这其实没啥,当然coco的数据集也是一样的,这里我不做过多的演示。我想要介绍的alfred里面一个很神奇的功能,也是十分牛逼的功能:

*各式各样的画box的函数*.

你还在为box烦恼吗?每次做完一个检测模型,画框的代码我觉得很麻烦,虽然复制粘贴很爽,但不是那么的优雅。而在alfred里面,你可以很方便的画bounding box:

Deep Learning 效率神器,节省你的大量时间

比如这个box的API,大概代码如下:

<section style="margin-left: 8px;margin-right: 8px;"><br  /></section>
你只要把box,scores,和classes传进去就可以了,甚至你连coco的labelmap你都可以省掉去了歪!然后出来的效果就是上图所示,所有的画框,score大小的抑制,颜色都可以自动帮你处理。

当然这不是说alfred里面的画框多牛逼,也有很多其他的好用的画框库,但我想说的不是某个库不行,而是在座的库都是...... 2D框好画,3D框你行吗?

Deep Learning 效率神器,节省你的大量时间
Deep Learning 效率神器,节省你的大量时间

很多人以为alfred只是一个image相关的库,图样图森破,那衣服。点云照样处理!

甚至可以给你在点云上画3D的Boundingbox,还不够,甚至可以帮助把点云里面的3D box投影到图片显示。。。

好了,介绍到这里大家应该知道alfred库是干啥的吧。案例一个十分好用的snippet,来自于alfred。我们每次写pytorch的代码,都喜欢托裤子放屁:

<section style="margin-left: 8px;margin-right: 8px;"><br  /></section>
实际上使用alfred你可以防止这种不优雅的if操作:

<section style="margin-left: 8px;margin-right: 8px;"><br  /></section>
虽然代码函数差不多,但是你只需要import一句,任何变量都可以使用,简化的代码就不止一行了。

最后告诉大家alfred它不是一个专注pytorch的库,如果你用tensorflow,你照样可以用它的一些API去简化你的操作。譬如tensorflow烦人的log,你不用设置环境变量也可以去掉它:

<section style="margin-left: 8px;margin-right: 8px;"><br  /></section>
然后整个世界就清净了许多。

alfred的彩蛋


其实要说彩蛋,那其实很多,挑比较有意思的将,其实alfred还有一个爬虫功能,当你需要某些图片的时候可以让alfred给你爬:

<section style="margin-left: 8px;margin-right: 8px;"><br  /></section>
然后你就有了一堆美女。。。图片。。

最后alfred其实有一个兄弟库,纯C++编写的,功能差不多,只不过C++里面也有很多人烦人的操作,用thor就可以让世界安静:

https://github.com/jinfagang/thor

Deep Learning 效率神器,节省你的大量时间

   runx 


分享自:董鑫

哈佛大学·人工智能博士在读 | :CoolApply
https://www.zhihu.com/question/384519338/answer/1123898006
著作权归作者所有。

”工欲善其事, 必先利其器“


今天介绍的是 NVIDIA 推出的一款专门用于记录深度学习调 (lian) 参 (dan) 的工具,runx。(为即将的新东家打免费广告了,哈哈)

https://github.com/NVIDIA/runx

runx非常的新,大概是五天前正式开源的。正好在 Github 上面看到,感觉挺有意思的,就拿来仔细的看了一下。这篇文章也应该是中文全网第一个介绍这个工具。

简单来说,runx 生来就是用来方便深度炼丹师记录各种实验数据的。

因为深度学习里面,一个大模型一跑少则几个小时,多则几天或者几个星期,如果没有很好的把已经跑过实验很好的记录下来,会是一件非常低效而且恼火的事情。

我在我之前的文章也介绍过一些方便记录实验数据的小方法,比如:
https://zhuanlan.zhihu.com/p/112583368

而 runx 则更像是把各种常用的工具做了一个集合,可以把他理解为深度学习炼丹中的”瑞士军刀“。工具很小,本身也很简单简洁,但是很多时候可以给你很大方便。

目前 runx 的文档还很不全,我先来介绍他的一个用法—- 记录实验输出及方便的Tensorboard记录

主要用的是 runx 下面的子模块,runx.logx 


logx.initialize


在实验开始前进行一些必要的设置。

<section style="margin-left: 8px;margin-right: 8px;"><br  /></section>
上面就是定义了:
logdir把所有保存的结果存在哪。如果指定的文件夹不存在,会自动的新建,不用再手动的 os.makedirs(logroot, exist_ok=True) 了哦。方便~

tensorboard是否开启 tensorboard 记录。这个也很方便,不用再手动的 writer = SummaryWriter()了哦。方便~

global_rank分布式训练的时候,防止多个输出,自动只log rank=0,不用自己写判断了哦。方便~

coolname是否在 logdir下面再新建一个随机命名的文件夹来用 logging(这样你可以在 logdir下面存一些除了logging之外的东西,方便分类)。随机命名的文件夹的画风是这样的 industrious-chickenarrogant-buffalo,哈哈哈哈哈。

hparams把所有的超参数都存起来,功能和我上面推荐的文章基本一样,虽然砸了我上面文章的”饭碗“,但是不得不说,方便~

eager_flush如果每次 tensorboard 写的东西比较多,那就把这个打开,以防因为IO太快没写上。(有些服务器开启了IO限制,经常会遇到实际没写上的情况,建议常开)

logx.msg()


把你程序之前 pirnt都换成这个就对了,他会帮你自动保存所有 print 输出,方便日后查看。方便~


logx.metrics


用来记录各种变量的,比如

phase 指定是 train 还是 test

metrics一个字典,里面装着所有你打算在这一步你要记录的值。

global_step这个是第几步的结果。

这其实就是一个 保存训练变量+TensorBoard自动写入器。


save_model


用法


epoch会用这个来命名存的模型

metric以什么为标准来决定当前模型是否是最好的模型,并由此决定要不要存。如果你的metric是准确率,那么 higher_better就要置为 True

delete_old是否每个 epoch 都保存一个一个新的,还是永远只存一个最好的。不用自己写判断的代码了哦。方便~


<pre style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="max-width: 100%;min-height: 1em;letter-spacing: 0.544px;white-space: normal;color: rgb(0, 0, 0);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;widows: 1;line-height: 1.75em;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;box-sizing: border-box !important;overflow-wrap: break-word !important;">—</span></strong>完<strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;box-sizing: border-box !important;overflow-wrap: break-word !important;">—</span></strong></span></strong></span></strong></p><section style="max-width: 100%;letter-spacing: 0.544px;white-space: normal;font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;widows: 1;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="margin-bottom: 15px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;color: rgb(127, 127, 127);font-size: 12px;font-family: sans-serif;line-height: 25.5938px;letter-spacing: 3px;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;color: rgb(0, 0, 0);box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 16px;font-family: 微软雅黑;caret-color: red;box-sizing: border-box !important;overflow-wrap: break-word !important;">为您推荐</span></strong></span></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;">内部泄露版!互联网大厂的薪资和职级一览<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"  /></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;color: rgb(87, 107, 149);-webkit-tap-highlight-color: rgba(0, 0, 0, 0);cursor: pointer;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;">研究生从入门到放弃!不好意思老板,我这周没进展</span></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;color: rgb(87, 107, 149);-webkit-tap-highlight-color: rgba(0, 0, 0, 0);cursor: pointer;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;">有了这个神器,轻松用 Python 写个 App</span></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;color: rgb(87, 107, 149);-webkit-tap-highlight-color: rgba(0, 0, 0, 0);cursor: pointer;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;">MIT最新深度学习入门课,安排起来!</span></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="font-size: 14px;">为什么魂斗罗只有128KB却可以实现那么长的剧情?</span><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"  /></p></section></section></section></section></section></section></section></section>

Deep Learning 效率神器,节省你的大量时间

本篇文章来源于: 深度学习这件小事

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享