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 这个网站。








 
    
评论