當前位置:
首頁 > 科技 > 資源 | DMLC團隊發布GluonCV和GluonNLP:兩種簡單易用的DL工具箱

資源 | 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 項目地址:https://github.com/dmlc/gluon-cv



  • GluonNLP 項目地址:https://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

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=

"<unk>"

, reserved=

"["<pad>", "<bos>", "<eos>"]"

)



創建詞表後,我們就能繼續構建神經網路模型。如下將從模型倉庫中導入一個標準的 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"

])
<

class

"

mxnet

.

ndarray

.

ndarray

.

NDArray

">
>>>

glove

["

baby

"].

shape


(

50

,)








本文為機器之心編譯,

轉載請聯繫本公眾號獲得授權



?------------------------------------------------


加入機器之心(全職記者 / 實習生):hr@jiqizhixin.com


投稿或尋求報道:editor@jiqizhixin.com


廣告 & 商務合作:bd@jiqizhixin.com

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

CVPR 2018 | 殘差密集網路:利用所有分層特徵的圖像超解析度網路
數據科學入門必讀:如何使用正則表達式?

TAG:機器之心 |