【例9.1】借用mxnet包中的mx.mlp函数和mlbench包数据设计一个二分类网络。
(1)准备数据,并进行简单的预处理
借用mlbench包中的一个二分类数据,并且将它分成训练集和测试集。
>require(mlbench)
>require(mxnet)
>data(Sonar,package="mlbench")
>Sonar[,61]=as.numeric(Sonar[,61])-1
>train.ind=c(1:50,100:150)
>train.x=data.matrix(Sonar[train.ind,1:60])
>train.y=Sonar[train.ind,61]
>test.x=data.matrix(Sonar[-train.ind,1:60])
>test.y=Sonar[-train.ind,61]
(2)建模
mxnet提供了一个训练多层神经网络的函数mx.mlp,可以通过它来训练一个神经网络模型。
>mx.set.seed(0)
>model<-mx.mlp(train.x, #训练数据
>train.y, #响应变量
>hidden_node=10, #隐藏层的结点数量
>out_node=2, #输出层的结点数
>out_activation="softmax", #激活函数
>num.round=20,
>array.batch.size=15,(www.xing528.com)
>learning.rate=0.07, #学习率
>momentum=0.9,
>eval.metric=mx.metric.accuracy #损失函数类型
)
Auto detect layout of input matrix,userowmajor..
Start training with 1 devices
[1]Train-accuracy=0.488888888888889
[2]Train-accuracy=0.514285714285714
[3]Train-accuracy=0.514285714285714
︙
[18]Train-accuracy=0.838095238095238
[19]Train-accuracy=0.838095238095238
[20]Train-accuracy=0.838095238095238
这里要注意,使用mx.set.seed而不是R自带的set.seed函数来控制随机数。因为mxnet的训练过程可能会运行在不同的运算硬件上,这里需要一个足够快的随机数生成器来管理整个随机数生成的过程。
(3)模型部署
模型训练好之后,可以很简单地进行预测:
>preds=predict(model,test.x)
Auto detect layout of input matrix,userowmajor..
>pred.label=max.col(t(preds))-1
>table(pred.label,test.y)
如果进行的是多分类预测,mxnet的输出格式是类数×样本数。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。