资源 | DMLC团队发布GluonCV和GluonNLP:两种简单易用的DL工具箱
选自
Gluon
机器之心编译
参与:思源、李亚洲
近日,DMLC 发布了简单易用的深度学习工具箱 GluonCV 和 GluonNLP,它们分别为计算机视觉和自然语言处理提供了顶级的算法实现与基本运算。本文简要介绍了这两个工具箱,并提供了基本的使用示例,更多详细的内容请查看它们的原文档。
GluonCV 文档地址:http://gluon-cv.mxnet.io
GluonNLP 文档地址:http://gluon-nlp.mxnet.io/
自去年以来,MXNet 的动态图接口 Gluon 凭借着它的简单易用、并行效率高和节省显存等特点,成为了非常受欢迎的一个开源工具。此外,Gluon 最大的特点就是文档和教程齐全,李沐及 MXNet 团队还发布了一系列「动手学深度学习」的公开课。
GluonCV 和 GluonNLP 继承了 Gluon 的优良传统,它们都能使用简单易用的 API 构建复杂的深度神经网络。此外,这两个项目目前都处于开发的早期阶段,它们的更新频率会比较高。因此,各位读者对该项目的贡献将极大地完善用户体验和工具性能。
GluonCV 项目地址:http://github.com/dmlc/gluon-cv
GluonNLP 项目地址:http://github.com/dmlc/gluon-nlp
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
http://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
numpyas
npimport
mxnetas
mxfrom
mxnetimport
gluon, ndfrom
mxnetimport
autogradas
agfrom
mxnet.gluonimport
nnfrom
gluoncv.model_zooimport
get_model选择模型架构可以简单地从已有模型中导入,以下将从 GluonCV 的模型库中导入用于 CIFAR10 的 20 层残差网络:
# number of GPUs to use
num_gpus =
1
ctx = [mx.gpu(i)
for
iin
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
gluonnlpas
nlp>>>
train = nlp.data.WikiText2(segment="train"
)>>>
train[0
][0
:5
][
"="
,"Valkyria"
,"Chronicles"
,"III"
,"="
]随后,我们可以根据上面导入的数据集创建词表:
>>>
vocab = nlp.Vocab(counter=nlp.data.Counter(train[0
]))>>>
vocabVocab(size=
33280
, unk="<unk>"
, reserved="["<pad>", "<bos>", "<eos>"]"
)创建词表后,我们就能继续构建神经网络模型。如下将从模型仓库中导入一个标准的 RNN 语言模型,并将其应用到上面加载的数据集上:
>>>
model = nlp.model.language_model.StandardRNN("lstm"
, len(vocab),...
200
,200
,2
,0.5
,True
)>>>
modelStandardRNN(
(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"
])<
class
"mxnet
.ndarray
.ndarray
.NDArray
">>>>
glove
["baby
"].shape
(
50
,)本文为机器之心编译, 转载请联系本公众号获得授权
?------------------------------------------------
加入机器之心(全职记者 / 实习生):hr@jiqizhixin.com
投稿或寻求报道:editor@jiqizhixin.com
广告 & 商务合作:bd@jiqizhixin.com
- 上海市科委将引导各类创新资源向示范区集聚
- 他们在清华MBA结缘,团队力量成就易咖的故事
- 李晨已注销中国国籍?团队转发文章辟谣
- 一线城市楼市,卖资源时代来临
- 距地的600光年类地行星被发现,资源比地球还优越!
- 朝美谈判团队亮相 “金特会”两边底线如何
- 【产品】新债观察—第257期
- 【产品】新债观察—第256期
- 【产品】新债观察—第255期
- 省政协副主席、省国土资源厅厅长陈铁雄来我县调研