gluon mxnet
当我在2016年回顾MXNet v0.7时,我觉得它是一个很有前途的深度学习框架,具有出色的可伸缩性(在GPU群集上几乎是线性的),良好的自动区分能力以及对CUDA GPU的最新支持。 我还感到它需要在其文档和教程上进行工作,并且在其模型动物园中需要更多示例。 另外,我希望看到MXNet的高级界面,我以为是Keras。
信息世界自那时以来,已经取得了很大的进步。 MXNet于2017年初迁移到Apache Software Foundation(Apache软件基金会)的领导下,尽管它仍在“孵化” 1.3版,但感觉还不错。
尽管在MXNet后端的Keras上进行了一些工作,但不同的高级界面变得更加重要: Gluon 。 在合并Gluon之前,您可以在MXNet中编写简单的命令式代码或快速的符号代码,但不能同时编写两者。 随着胶子,你可以结合两者的优点,在某种程度上,与充满竞争Keras和PyTorch 。
Gluon声称的优势包括简单的代码,灵活的建模,动态图和高性能:
这四个项目以及大量扩展的模型示例,使Gluon / MXNet与Keras / TensorFlow和PyTorch大致相等,以简化开发和训练速度。 您可以在Gluon主页上看到说明这些特性的Gluon代码示例,并在Gluon API的概述页面上重复这些示例。
Gluon API包括用于神经网络层,循环神经网络,损失函数,数据集方法和视觉数据集的功能,模型动物园以及一组实验性的贡献性神经网络方法。 您可以将Gluon与标准MXNet和NumPy模块(例如module
, autograd
和ndarray
以及Python控制流自由组合。
Gluon有许多用于构建模型的层可供选择,包括基本层(密集层,Dropout等),卷积层,池化层和激活层。 这些都是单线呼叫。 这些可以在其他网络容器内部使用,例如gluon.nn.Sequential()
。
可以使用hybridize()
方法将HybridSequential
网络缓存(转换为符号图)以实现高性能:
net = nn.HybridSequential()
with net.name_scope():
net.add(nn.Dense(256, activation="relu"))
net.add(nn.Dense(128, activation="relu"))
net.add(nn.Dense(2))
net.hybridize()
注意Dense
层方法可以将激活层名称作为参数的方式。 那是Gluon和Keras之间许多相似之处之一。
Sequential
容器和HybridSequential
容器均未记录为HybridSequential
API的一部分。 正如我通过搜索源代码树发现的那样,它们是在cubacubator-mxnet / python / mxnet / gluon / nn / basic_layers.py中实现的。
MXNet v1.3包含许多新功能,改进和错误修复。 重点包括能够混合RNN(递归神经网络)层以提高性能,新的和更新的预先训练的视觉模型,将模型导出到ONNX(开放神经网络交换)格式以及将Nvidia TensorRT集成到MXNet中以加速推理的功能。 。 此外,将英特尔MKL(算术内核库)集成到MXNet中,可以使包括卷积节点在内的密集操作的英特尔CPU的性能提高4倍。
MXNet社区也一直在密切关注质量检查和持续集成。 在采取的步骤中,包括将“ 深度学习:笔直的涂料 ”教程中的示例笔记本集成到夜间CI测试中。
如果您已经安装了带有Notedown的Python,MXNet和Jupyter笔记本,并且可以正常工作,则可以跳到下一部分。 否则,请继续。
在弄清楚这个可重现的顺序之前,我无法告诉您不同软件组件的旧版本引发了模糊的错误以及其他软件包的安装带来的问题。 这样,除了您自己的代码外,您不应该遇到错误,也不应破坏您可能已安装的其他深度学习框架。
它是唯一可能的安装选项吗? 不,当然不是。 在Amazon SageMaker中运行MXNet或在AWS上运行深度学习AMI甚至更加容易,其中已经安装了您所需的一切。
首先为您的平台安装最新版本的Python 3。 (我在使用python 2或更早版本的python 3运行MXNet时遇到了问题。)我建议从Python.org安装python 3。 如果您喜欢Anaconda或MiniConda环境,则可以使用其中之一安装Python 3,并可以跳过Jupyter安装步骤。
验证您可以从命令行运行python3
并报告最新版本。 在2018年10月下旬的安装中, python3 -V
返回Python 3.7.1; 您的版本可能会更高。
然后安装Jupyter 。 我用了点子 如果您安装了Anaconda(默认情况下安装Jupyter),则不需要此步骤。
python3 -m pip install --upgrade pip
python3 -m pip install jupyter
如果从命令行运行jupyter notebook
,您应该会看到一个浏览器窗口打开,并且能够使用Python 3内核创建一个新笔记本。 关闭这两个窗口并停止笔记本服务器,通常是在命令行中按Ctrl-c两次。
现在按照Gluon 速成课程自述文件中的说明使用压缩包安装Notedown。 使用Notedown插件,Jupyter可以阅读以markdown格式保存的笔记本,这对于速成班和深度学习:笔直涂料都非常有用。
pip install https://github.com/mli/notedown/tarball/master
通过运行带有Notedown的Jupyter进行烟雾测试:
jupyter notebook --NotebookApp.contents_manager_class='notedown.NotedownContentsManager'
再次关闭任何网页并停止笔记本服务器。
现在,我们准备为MXNet创建虚拟环境 。 如果您是Anaconda用户,则可以使用conda创建虚拟环境 。 我使用本地Python3 venv工具 ,从我的主目录开始:
python3 -m venv envs/mxnet
现在激活虚拟环境并为您的平台安装MXNet 。 我在Mac上选择了带有MKL(英特尔为其CPU的高性能库)的MXNet,因为我在Mac上(对于CUDA GPU没有MXNet二进制文件),但是如果您最近安装了在Linux上安装了CUDA的Nvidia GPU或Windows,您可以安装同时具有CUDA和MKL支持的MXNet版本。 在Bash shell上,虚拟环境中的MXNet安装如下:
source envs/mxnet/bin/activate
pip install mxnet-mkl
C外壳程序和Fish外壳程序中的激活稍有不同,因为您可以直接运行激活脚本,而不必使用source
。 在任何情况下,关闭外壳程序后,只要想返回此MXNet安装,就都需要激活环境。 如果您不在主目录中,则Bash激活命令为:
source ~/envs/mxnet/bin/activate
通过运行Python 3并导入我们刚刚安装的MXNet库,在命令行中测试MXNet安装。 请注意,命令行上的(mxnet)
前缀表示我们处于虚拟环境中。
(mxnet) Martins-Retina-MacBook:~ martinheller$ python3
Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 03:13:28)
[Clang 6.0 (clang-600.0.57)] on darwin
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import mxnet as mx
>>> from mxnet import nd
>>> nd.array(((1,2,3),(5,6,7)))
[[1. 2. 3.]
[5. 6. 7.]]
>>> ^D
(mxnet) Martins-Retina-MacBook:~ martinheller$
现在,我们准备在安装了MXNet的虚拟环境中使用Notedown在Jupyter笔记本中测试MXNet:
IDG启动Jupyter笔记本的Bash shell输出。
IDGJupyter笔记本初始网页,显示目录。 下拉右上角的“新建”菜单以选择一个内核。 我们需要Python3。添加下图所示的三行Python代码并运行该单元。
IDG在Jupyter笔记本中测试MXNet。 一切都如预期。
现在,您已经在Jupyter笔记本中测试了MXNet的安装,接下来可以进行下一步并更全面地测试Gluon。 浏览到GitHub上 的gluon -api / gluon -api存储库 ,并下载示例代码的Jupyter笔记本 。 转到下载笔记本的目录,如有必要,激活MXNet虚拟环境,运行Jupyter笔记本,打开示例并运行它。 完成培训可能需要一段时间。 如果一切顺利,您将看到类似以下的内容:
IDG这Jupyter笔记本是规范的测试胶子在MXNet。 它是使用Softmax交叉熵损失和随机梯度下降算法的用于MNIST数字识别的简单两层密集神经网络,多层感知器的实现。
MXNet现在有许多针对 Gluon和Module API 的教程 。 我已经提到了有关使用Gluon进行深度学习的长期课程,《 Deep Learning:The Straight Dope 》和简短的60分钟的Gluon Crash课程 。
此外,大约有30个针对Python的Gluon教程。 在Module API方面,大约有24个Python教程,5个Scala教程,2个C ++,R的9个和Perl的4个。
当我在今年9月审查Keras时,我说:“如果我今天开始一个新的深度学习项目,我很可能会与Keras进行研究。” 我对此不太确定。 对于CPU和GPU的深度学习研究,Gluon / MXNet几乎与Keras / TensorFlow一样好。
不利的一面是,与TensorFlow不同,MXNet当前缺少对TPU或FPGA的支持,并且缺少与TensorFlow的TensorBoard等效的图形可视化功能。 此外,与Gluon / MXNet相比,Keras / TensorFlow具有更大的生态系统。
Keras可以比Gluon部署在更多的环境中,但是除了能够训练模型和TensorRT的计算机外,您还可以将Gluon模型部署到Android,iOS,Raspberry Pi和Nvidia Jetson设备进行预测。 目前,Gluon和Keras都比仍处于beta状态的PyTorch更成熟。 PyTorch和Gluon都可以动态创建模型。 Keras目前不能。
最终,选择使用哪种深度学习框架可能完全取决于您的特定要求,或者您知道和喜欢的东西。 但是感谢Gluon和其他重大改进(在文档,教程,模型等方面),MXNet逐渐成为与TensorFlow或PyTorch一样好的深度学习选择。
翻译自: https://www.infoworld.com/article/3318557/review-mxnet-deep-learning-shines-with-gluon.html
gluon mxnet