《MXNet深度学习实战》—1.3 关于MXNet

网友投稿 1084 2022-05-29

1.3 关于MXNet

《MXNet深度学习实战》—1.3 关于MXNet

在众多主流的深度学习框架中,很难说哪一个在各方面都占有绝对优势,但是假如你选择MXNet进行深度学习算法的开发和部署,相信你一定能体会到其运行速度快、省显存等优点。另外随着MXNet的不断推广,相关的学习资料也越来越多,社区越来越壮大,这对于MXNet而言是非常利好的。

MXNet从开源起就将命令式编程和符号式编程无缝衔接在一起,比如在设计神经网络结构时采用符号式编程得到计算图,然后根据计算图进行一系列的优化从而提高性能,而在训练模型过程中涉及的逻辑控制操作则可以通过命令式编程的方式实现。因此MXNet在灵活和高效之间取得了非常好的平衡,这使得MXNet不仅适合于学术界研究试错,也适合工业界进行线上部署。事实上,成功很少会有捷径,MXNet虽然是2015年年底开源,但在开源之前其实经历了较长的开发期,属于典型的厚积薄发。

1.3.1 MXNet的发展历程

在MXNet诞生之前,已有一个深度学习框架cxxnet,该框架比较成熟,不仅可扩展性强,而且拥有统一的并行计算接口;另外还有一个接口Minerva,这是一个比较灵活的类似于NumPy的计算接口,当时还在CMU读博的李沐就和这两个项目的开发者一起将二者结合在一起,最终诞生了MXNet,MXNet这个名字也是前面两个项目名字的组合。

2015年9月,cxxnet正式迁移至MXNet,这也标志着MXNet正式开源。作为cxxnet的优化版本,MXNet在实现了cxxnet所有功能的基础上加入了更多新的功能,比如NDArray模块和Symbol模块,同时其速度更快,显存占用更少。另外MXNet提供了更加灵活且直观的接口,更加便于用户使用,详细内容可以参考MXNet官方文档。该文档中提供了详细的接口介绍和使用方法,文档地址:https://mxnet.incubator.apache.org/,同时MXnet官方开源了代码,感兴趣的读者可以访问:https://github.com/apache/incubator-mxnet了解。

2016年年底,Amazon宣布正式将MXNet作为官方使用的深度学习框架。当时的背景是TensorFlow已经开源了一年左右,普及速度非常快;Caffe作为深度学习框架的元老,积累了非常多的用户。这两种深度学习框架对处于快速发展中的MXNet施加了很大的压力,毕竟那段时间MXNet的开发者们的主要精力还放在开发上,框架推广上的力度还不够,因此此时加入Amazon这一事件给了MXNet很大的支持,进一步推动了MXNet后期的快速发展和推广。

2017年8月,MXNet发布了0.11版本,该版本最大的改进就是发布了动态图接口Gluon。采用命令式编程的Gluon接口使得网络结构的设计更加灵活,同时也更便于代码调试。Gluon和PyTorch拥有许多共同点,比如命令式编程的特点、主要的接口设计等,目前Gluon接口已经成为MXNet框架非常重要的一部分。为了方便读者交流学习,Gluon官方推出了技术论坛,该技术论坛目前非常活跃,感兴趣的读者可以访问Gluon官方论坛:https://discuss.gluon.ai/。

2018年5月,MXNet正式推出了专门为计算机视觉任务打造的深度学习工具库GluonCV,该工具库提供了包括图像分类、目标检测、图像分割等领域的前沿算法复现模型。GluonCV主要以Gluon接口为例进行实现,而且提供了详细的复现代码,从方便读者研究学习。目前GluonCV库的代码已经开源,代码地址:https://github.com/dmlc/gluon-cv,GluonCV库官方文档地址:https://gluon-cv.mxnet.io/。官方文档中还提供了预训练模型的下载链接、复现代码的下载链接、各种接口介绍和教学的例子,非常便于读者学习。

2018年10月,MXNet推出GluonCV 0.3.0版本,新版本不仅添加了图像分类、目标检测、图像分割等领域新的算法模型,而且对已有的复现模型也做了优化,使得算法模型在效果上有了进一步的提升。目前GluonCV还在快速发展中,内容也越来越丰富,强烈推荐读者使用和学习。

2018年11月,MXNet正式推出1.3.1版本,该版本提供了更加完善的接口,考虑到目前GluonCV库需要1.3.0以上版本的MXNet才能支持,因此本书代码将基于MXNet 1.3.1版本进行开发。

MXNet主打小巧和灵活,版本更新速度快而且兼容性好,接口方面基本上紧跟前沿的算法,能够及时实现前沿算法中的自定义操作,并整合到MXNet框架的接口中。比如目标检测(object detection)算法中比较优秀的SSD,其中关于default boxes的生成和检测层都有对应的实现,用户可以直接调用MXNet的指定接口。再比如图像分割领域的Mask RCNN算法中用到的ROIAlign层在MXNet也有对应的实现。这些都说明MXNet的开发者一直致力于开发和维护MXNet,基本上两、三个月的时间就会发布新版本,如此活跃的社区必将推动MXNet的快速发展。虽然MXNet发布新版本的节奏较快,但有一个好处在于每次发布的新版本对原有接口的改动非常小,主要是修改bug和增加新的接口,因此这不仅大大降低了代码维护的成本,还提供了更加丰富的接口选择。

开发者 深度学习

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:04.go命令行
下一篇:【Unity3D日常开发】Unity3D中实现箭头指向目标点的效果
相关文章