mx.mlp接口固然很方便,但是神经网络的一大特点便是它的灵活性,不同的结构可能有着完全不同的特性。mxnet的亮点之一便是它赋予了用户极大的自由度,从而可以任意定义需要的神经网络结构。本节用一个简单的回归任务来介绍其相关的语法。
【例9.2】使用mxnet提供了“Symbol”系统,建立回归预测模型。
(1)数据准备
>data(BostonHousing,package="mlbench")
>train.ind=seq(1,506,3)
>train.x=data.matrix(BostonHousing[train.ind,-14])
>train.y=BostonHousing[train.ind,14]
>test.x=data.matrix(BostonHousing[-train.ind,-14])
>test.y=BostonHousing[-train.ind,14]
(2)建模
mxnet提供了一个叫作“Symbol”的系统,从而可以定义结点之间的连接方式与激活函数等参数。下面是一个定义没有隐藏层神经网络的简单例子:
>data<-mx.symbol.Variable("data")#定义输入数据
>fc1<-mx.symbol.FullyConnected(data,num_hidden=1)
>lro<-mx.symbol.LinearRegressionOutput(fc1)#定义损失函数
在神经网络中,回归与分类的差别主要在于输出层的损失函数。这里使用平方误差来训练模型。希望进一步了解Symbol的读者可以继续阅读相关文档。
定义了神经网络之后,便可以使用mx.model.FeedForward.create进行训练了。
>mx.set.seed(0)
>model<-mx.model.FeedForward.create(lro,
X=train.x,
y=train.y,
ctx=mx.cpu(),
num.round=50,
array.batch.size=20,
learning.rate=2e-6,(www.xing528.com)
momentum=0.9,
eval.metric=mx.metric.rmse)
Autodetectlayoutofinputmatrix,userowmajor..
Starttrainingwith1devices
[1]Train-rmse=16.063282524034
[2]Train-rmse=12.2792375712573
[3]Train-rmse=11.1984634005885
︙
[48]Train-rmse=8.26890902770415
[49]Train-rmse=8.25728089053853
[50]Train-rmse=8.24580511500735
(3)模型部署
这里针对回归任务修改了eval.metric参数。模型提供的评价函数包括“accura-cy”“rmse”“mae”和“rmsle”,用户也可以针对需要自定义评价函数,例如:
Autodetectlayoutofinputmatrix,userowmajor..
Starttrainingwith1devices
[1]Train-mae=13.1889538083225
[2]Train-mae=9.81431959337658
[3]Train-mae=9.21576419870059
︙
[48]Train-mae=6.41731406417158
[49]Train-mae=6.41011292926139
[50]Train-mae=6.40312503493494
至此,mxnet使用方法已经基本掌握了。9.3.3节将介绍更有趣的应用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。