2018年4月26日星期四

DMLC 团队发布 GluonCV 和 GluonNLP:两种简单易用的 DL 工具箱

  • GluonCV 文档地址:https://ift.tt/2FiD2wx 

  • GluonNLP 文档地址:https://ift.tt/2HZAA1d

  • 自去年以来,MXNet 的动态图接口 Gluon 凭借着它的简单易用、并行效率高和节省显存等特点,成为了非常受欢迎的一个开源工具。此外,Gluon 最大的特点就是文档和教程齐全,李沐及 MXNet 团队还发布了一系列「动手学深度学习」的公开课。

    GluonCV 和 GluonNLP 继承了 Gluon 的优良传统,它们都能使用简单易用的 API 构建复杂的深度神经网络。此外,这两个项目目前都处于开发的早期阶段,它们的更新频率会比较高。因此,各位读者对该项目的贡献将极大地完善用户体验和工具性能。

    • GluonCV 项目地址:https://ift.tt/2Hw6bXl

    • GluonNLP 项目地址:https://ift.tt/2HpHkrY

    GluonCV 提供了计算机视觉领域顶级深度学习算法的实现。设计上,GluonCV 是为了帮助工程师、研究人员、学生快速的做出产品原型、验证新思路、学习计算机视觉。

    1. 训练脚本从而重现最新论文中的顶级结果;

    2. 大量的预训练模型;

    3. 细心设计的 API,便于理解实现;

    4. 社区支持。

    GluonNLP 提供了 NLP 领域顶级深度学习模型的实现,且建立了文本数据管道和模型的模块。设计上,它同样也是为了让工程师、研究员和学生能快速的实现研究思路,做出产品原型。该工具箱提供以下四大特征:

    1. 训练脚本来重现研究论文中的顶级结果;

    2. 通用 NLP 任务的预训练模型;

    3. 仔细设计的 API,极大的减少了实现的复杂性;

    4. 社区支持。

    安装

    安装 MXNET

    GluonCV 和 GluonNLP 都依赖最新版的 MXNet,最简单的方式是通过 pip 安装 MXNet,运行下面的命令行将安装 CPU 版本的 MXNet。

    pip install --pre --upgrade mxnet

    安装 GluonCV

    使用 pip 是安装 GluonCV 最简单的方式:

    pip install gluoncv 

    当然,我们也可以使用 Git 复制 GluonCV 项目并在本地安装:

    git clone https://github.com/dmlc/gluon-cvcd gluon-cv && python setup.py install --user 

    安装 GluonNLP

    同样,通过以下 pip 命令安装 GluonNLP 也是最简单的:

    pip install gluonnlp 

    这两个工具目前都提供了案例或教程,但 GluonNLP 假定了用户对深度学习与 NLP 有基础理解,GluonCV 的教程假定用户对深度学习与计算机视觉有基础了解。以下简要展示了这两个工具的使用案例。

    以下的案例将使用 20 层的残差网络在 CIFAR10 上从头开始训练,我们这里只展示了模型架构和最优化方法。使用 GluonCV 首先需要导入这个库:

    import numpy as np import mxnet as mx  from mxnet import gluon, nd from mxnet import autograd as ag from mxnet.gluon import nn  from gluoncv.model_zoo import get_model 

    选择模型架构可以简单地从已有模型中导入,以下将从 GluonCV 的模型库中导入用于 CIFAR10 的 20 层残差网络:

    # number of GPUs to use num_gpus = 1 ctx = [mx.gpu(i) for i in range(num_gpus)]  # Get the model CIFAR_ResNet20_v1, with 10 output classes, without pre-trained weights net = get_model('cifar_resnet20_v1', classes=10) net.initialize(mx.init.Xavier(), ctx = ctx) 

    而剩下的优化方法及损失函数的配置就可以通过一般的 Gluon 接口完成,这同样也是非常简明和高效的使用方法。

    # Learning rate decay factor lr_decay = 0.1 # Epochs where learning rate decays lr_decay_epoch = [80, 160, np.inf]  # Nesterov accelerated gradient descent optimizer = 'nag' # Set parameters optimizer_params = {'learning_rate': 0.1, 'wd': 0.0001, 'momentum': 0.9}  # Define our trainer for net trainer = gluon.Trainer(net.collect_params(), optimizer, optimizer_params)  loss_fn = gluon.loss.SoftmaxCrossEntropyLoss() 

    对于 GluonNLP 来说,一般的任务都可以分为加载数据、构建词表、搭建模型和加载词嵌入等。以下将针对这些步骤展示该自然语言处理库的简单使用过程。

    首先,以下代码将导入 GluonNLP,并加载 Wikitext-2 数据集:

    >>> import gluonnlp as nlp >>> train = nlp.data.WikiText2(segment='train') >>> train[0][0:5] ['=', 'Valkyria', 'Chronicles', 'III', '='] 

    随后,我们可以根据上面导入的数据集创建词表:

    >>> vocab = nlp.Vocab(counter=nlp.data.Counter(train[0])) >>> vocab Vocab(size=33280, unk="", reserved="['', '', '']") 

    创建词表后,我们就能继续构建神经网络模型。如下将从模型仓库中导入一个标准的 RNN 语言模型,并将其应用到上面加载的数据集上:

    >>> model = nlp.model.language_model.StandardRNN('lstm', len(vocab), ...                                              200, 200, 2, 0.5, True) >>> model StandardRNN(   (embedding): HybridSequential(     (0): Embedding(33280 -> 200, float32)     (1): Dropout(p = 0.5, axes=())   )   (encoder): LSTM(200 -> 200.0, TNC, num_layers=2, dropout=0.5)   (decoder): HybridSequential(     (0): Dense(200 -> 33280, linear)   ) ) 

    最后,加载词嵌入表征就能馈送到模型并进行训练。如下将加载 GloVe 词嵌入表征,它是一种顶级的英语词嵌入方法:

    >>> glove = nlp.embedding.create('glove', source='glove.6B.50d') # Obtain vectors for 'baby' in the GloVe word embedding >>> type(glove['baby'])  >>> glove['baby'].shape (50,) 
    ]]> 原文: https://ift.tt/2I2NECI
    RSS Feed

    机器知心

    IFTTT

    没有评论:

    发表评论

    JavaScript 之父联手近万名开发者集体讨伐 Oracle:给 JavaScript 一条活路吧!- InfoQ 每周精要848期

    「每周精要」 NO. 848 2024/09/21 头条 HEADLINE JavaScript 之父联手近万名开发者集体讨伐 Oracle:给 JavaScript 一条活路吧! 精选 SELECTED C++ 发布革命性提案 "借鉴"Rust...