AWS與微軟合作發(fā)布Gluon API 可快速構(gòu)建機(jī)器學(xué)習(xí)模型

責(zé)任編輯:editor004

作者:楊賽

2017-10-19 11:43:31

摘自:INFOQ

2017年10月12日,AWS與微軟合作發(fā)布了Gluon開源項(xiàng)目,該項(xiàng)目旨在幫助開發(fā)者更加簡(jiǎn)單快速的構(gòu)建機(jī)器學(xué)習(xí)模型

2017年10月12日,AWS與微軟合作發(fā)布了Gluon開源項(xiàng)目,該項(xiàng)目旨在幫助開發(fā)者更加簡(jiǎn)單快速的構(gòu)建機(jī)器學(xué)習(xí)模型,同時(shí)保留了較好的性能。根據(jù)Gluon項(xiàng)目官方Github頁(yè)面上的描述,Gluon API支持任意一種深度學(xué)習(xí)框架,其相關(guān)規(guī)范已經(jīng)在Apache MXNet項(xiàng)目中實(shí)施,開發(fā)者只需安裝最新版本的MXNet(master)即可體驗(yàn)。AWS用戶可以創(chuàng)建一個(gè)AWS Deep Learning AMI進(jìn)行體驗(yàn)。該頁(yè)面提供了一段簡(jiǎn)易使用說明,摘錄如下:本教程以一個(gè)兩層神經(jīng)網(wǎng)絡(luò)的構(gòu)建和訓(xùn)練為例,我們將它稱呼為多層感知機(jī)(multilayer perceptron)。(本示范建議使用Python 3.3或以上,并且使用Jupyter notebook來運(yùn)行。詳細(xì)教程可參考這個(gè)頁(yè)面。)首先,進(jìn)行如下引用聲明:import mxnet as mx

from mxnet import gluon, autograd, ndarray

import numpy as np

然后,使用gluon.data.DataLoader承載訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)。這個(gè)DataLoader是一個(gè)iterator對(duì)象類,非常適合處理規(guī)模較大的數(shù)據(jù)集。

train_data = mx.gluon.data.DataLoader(mx.gluon.data.vision.MNIST(train=True, transform=lambda data, label: (data.astype(np.float32)/255, label)), batch_size=32, shuffle=True)test_data = mx.gluon.data.DataLoader(mx.gluon.data.vision.MNIST(train=False, transform=lambda data, label: (data.astype(np.float32)/255, label)), batch_size=32, shuffle=False)

接下來,定義神經(jīng)網(wǎng)絡(luò):

# 先把模型做個(gè)初始化net = gluon.nn.Sequential()# 然后定義模型架構(gòu)with net.name_scope(): net.add(gluon.nn.Dense(128, activation="relu")) # 第一層設(shè)置128個(gè)節(jié)點(diǎn) net.add(gluon.nn.Dense(64, activation="relu")) # 第二層設(shè)置64個(gè)節(jié)點(diǎn) net.add(gluon.nn.Dense(10)) # 輸出層

然后把模型的參數(shù)設(shè)置一下:

# 先隨機(jī)設(shè)置模型參數(shù)# 數(shù)值從一個(gè)標(biāo)準(zhǔn)差為0.05正態(tài)分布曲線里面取net.collect_params().initialize(mx.init.Normal(sigma=0.05))# 使用softmax cross entropy loss算法 # 計(jì)算模型的預(yù)測(cè)能力softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()# 使用隨機(jī)梯度下降算法(sgd)進(jìn)行訓(xùn)練# 并且將學(xué)習(xí)率的超參數(shù)設(shè)置為 .1trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': .1})

之后就可以開始跑訓(xùn)練了,一共分四個(gè)步驟。一、把數(shù)據(jù)放進(jìn)去;二、在神經(jīng)網(wǎng)絡(luò)模型算出輸出之后,比較其與實(shí)際結(jié)果的差距;三、用Gluon的autograd計(jì)算模型各參數(shù)對(duì)此差距的影響;四、用Gluon的trainer方法優(yōu)化這些參數(shù)以降低差距。以下我們先讓它跑10輪的訓(xùn)練:

epochs = 10for e in range(epochs): for i, (data, label) in enumerate(train_data): data = data.as_in_context(mx.cpu()).reshape((-1, 784)) label = label.as_in_context(mx.cpu()) with autograd.record(): # Start recording the derivatives output = net(data) # the forward iteration loss = softmax_cross_entropy(output, label) loss.backward() trainer.step(data.shape[0]) # Provide stats on the improvement of the model over each epoch curr_loss = ndarray.mean(loss).asscalar() print("Epoch {}. Current Loss: {}.".format(e, curr_loss))

若想了解更多Gluon說明與用法,可以查看gluon.mxnet.io這個(gè)網(wǎng)站。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)