BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

AWS与微软合作发布Gluon API 可快速构建机器学习模型

| 作者 杨赛 关注 3 他的粉丝 发布于 2017年10月19日. 估计阅读时间: 7 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

2017年10月12日,AWS与微软合作发布了Gluon开源项目,该项目旨在帮助开发者更加简单快速的构建机器学习模型,同时保留了较好的性能。

根据Gluon项目官方Github页面上的描述,Gluon API支持任意一种深度学习框架,其相关规范已经在Apache MXNet项目中实施,开发者只需安装最新版本的MXNet(master)即可体验。AWS用户可以创建一个AWS Deep Learning AMI进行体验。

该页面提供了一段简易使用说明,摘录如下:

本教程以一个两层神经网络的构建和训练为例,我们将它称呼为多层感知机(multilayer perceptron)。(本示范建议使用Python 3.3或以上,并且使用Jupyter notebook来运行。详细教程可参考这个页面。)

首先,进行如下引用声明:

import mxnet as mx
from mxnet import gluon, autograd, ndarray
import numpy as np

然后,使用gluon.data.DataLoader承载训练数据和测试数据。这个DataLoader是一个iterator对象类,非常适合处理规模较大的数据集。

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)

接下来,定义神经网络:

# 先把模型做个初始化
net = gluon.nn.Sequential()
# 然后定义模型架构
with net.name_scope():
    net.add(gluon.nn.Dense(128, activation="relu")) # 第一层设置128个节点
    net.add(gluon.nn.Dense(64, activation="relu")) # 第二层设置64个节点
    net.add(gluon.nn.Dense(10)) # 输出层

然后把模型的参数设置一下:

# 先随机设置模型参数
# 数值从一个标准差为0.05正态分布曲线里面取
net.collect_params().initialize(mx.init.Normal(sigma=0.05))

# 使用softmax cross entropy loss算法 
# 计算模型的预测能力
softmax_cross_entropy = gluon.loss.SoftmaxCrossEntropyLoss()

# 使用随机梯度下降算法(sgd)进行训练
# 并且将学习率的超参数设置为 .1
trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': .1})

之后就可以开始跑训练了,一共分四个步骤。一、把数据放进去;二、在神经网络模型算出输出之后,比较其与实际结果的差距;三、用Gluon的autograd计算模型各参数对此差距的影响;四、用Gluon的trainer方法优化这些参数以降低差距。以下我们先让它跑10轮的训练:

epochs = 10
for 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这个网站。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT