专栏首页素质云笔记MxNet+R︱用R语言实现深度学习(单CPU/API接口,一)

MxNet+R︱用R语言实现深度学习(单CPU/API接口,一)

一、MxNet对R的API接口

MxNet提供给了R一个API接口,但是这个API接口也不是万能的,不同的操作系统有着不同的使用功能。

1、 Windows/Mac用户——只能CPU训练

可以通过下面的代码安装预编译的版本。这个版本会每周进行预编译,不过为了保证兼容性,只能使用CPU训练模型。

这个接口其不想pycaffe一样,调用本地的caffe,而是一个远端MxNet社团在维护的一个版本,不能算是正式的MxNet

install.packages("drat", repos="https://cran.rstudio.com")
drat:::addRepo("dmlc")
install.packages("mxnet")

2、 Linux用户——兼GPU版本

详情可参考官网链接:http://mxnet.io/get_started/setup.html

二、官方案例一:多层感知器MLP

参考博文:mxnet:结合R与GPU加速深度学习

案例数据:mlbench包自带数据集

使用package:mxnet(之前博主在想,要用mxnet是否需要下载MxNet,但是这个API还是很给力的...)

1、准备数据

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、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, learning.rate=0.07, momentum=0.9, eval.metric=mx.metric.accuracy)

其中: 1、mx.set.seed(0),随机数设置不是之前的set.seed,因为如果要并行、分布式的话,需要一个更快、更效率的随机数生成器,于是重写了一个更好的 2、函数mx.mlp:mx.mlp(data训练自变量x,label训练因变量y,每个隐藏层的大小hidden_node,输出层的结点数out_node,激活函数类型out_activation,num.round,学习率learning.rate,动量momentum)

激活函数类型out_activation类型:softmax/tanh 其他函数类型跟mx.model.FeedForward.create,前馈模型一致: num.round,迭代次数,默认10 array.batch.size,默认128,输入数组个数 eval.metric:评估函数

3、模型预测

preds = predict(model, test.x)

pred.label = max.col(t(preds))-1
table(pred.label, test.y)

predict返回的两个概率:成为0的概率,成为1的概率,max.col找到了成为0/1,哪个概率值最大,就是哪个

——————————————————————————————

三、官方案例二:利用Symbol系统自定义节点——构造简单回归

参考:http://mxnet.io/tutorials/r/symbol.html 一般情况下,不同的深度学习架构都需要自己构建节点,而Tensorflow对节点十分看重,把tensor张量作为数据输入。

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、利用Symbol系统自定义节点

mxnet提供了一个叫做“Symbol”的系统,从而使我们可以定义结点之间的连接方式与激活函数等参数。 下面是一个定义没有隐藏层神经网络,模拟回归的简单例子:

# 定义输入数据
data <- mx.symbol.Variable("data")
# 完整连接的隐藏层
# data: 输入源

# num_hidden: 该层的节点数
fc1 <- mx.symbol.FullyConnected(data, num_hidden=1)

# 针对回归任务,定义损失函数
lro <- mx.symbol.LinearRegressionOutput(fc1)

输入数据mx.symbol.Variable,然后设置了一个节点mx.symbol.FullyConnected,设置了节点损失函数mx.symbol.LinearRegressionOutput 回归与分类的差别主要在于输出层的损失函数。这里我们使用了平方误差fc1(L1损失)来训练模型。

3、模型训练

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, momentum=0.9, eval.metric=mx.metric.rmse)

ctx控制使用CPU还是GPU,ctx=mx.cpu(),ctx=mx.gpu() eval.metric评估函数,包括”accuracy”,”rmse”,”mae” 和 “rmsle”

4、如何写新的评估函数

#定义一个函数
demo.metric.mae <- mx.metric.custom("mae", function(label, pred) {
  res <- mean(abs(label-pred))
  return(res)
})

#直接在eval.metric中体现

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, momentum=0.9, eval.metric=demo.metric.mae)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • mxnet:结合R与GPU加速深度学习

    近年来,深度学习可谓是机器学习方向的明星概念,不同的模型分别在图像处理与自然语言处理等任务中取得了前所未有的好成绩。在实际的应用中,大家除了关心模型的准确度,还...

    素质
  • 利用Caffe训练模型(solver、deploy、train_val)+python使用已训练模型

    快照的大用途:如果出了什么意外中断了训练,那真是天都要塌了,所以快照存储了训练的中间结果,这个设计真是人性化,当再次训练时,就可以从快照中恢复数据了。直接在最后...

    素质
  • R︱高效数据操作——data.table包(实战心得、dplyr对比、key灵活用法、数据合并)

    由于业务中接触的数据量很大,于是不得不转战开始寻求数据操作的效率。于是,data.table这个包就可以很好的满足对大数据量的数据操作的需求。

    素质
  • 使用Apache MXNet分类交通标志图像

    有许多深度学习的框架,例如TensorFlow、Keras、Torch和Caffe,Apache MXNet由于其在多个GPU上的可伸缩性而受到欢迎。在这篇博文...

    AiTechYun
  • python基于socket进行端口转发

    分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/xia...

    py3study
  • 特征工程

    特征工程和数据清洗转换是比赛中至关重要的一块,因为数据和特征决定了机器学习的上限,而算法和模型只是逼近这个上限而已,所以特征工程的好坏往往决定着最后的结果

    mathor
  • 如何在CDH集群使用HDFS快照

    HDFS中可以对目录创建Snapshot,创建之后不管后续目录发生什么变化,都可以通过快照找回原来的文件和目录结构,那么在CDH集群中如何使用HDFS的快照功能...

    Fayson
  • Yoshua Bengio清华最新演讲:深度学习AI迈向人类水平还面临这些挑战(内含PPT及讲座录音)

    被称为“人工智能三巨头”之一的蒙特利尔大学计算机科学与运算研究系教授Yoshua Bengio为清华的师生带来了一场长达一个半小时的充实演讲。

    大数据文摘
  • 2、括弧匹配检验

    2、括弧匹配检验(check.cpp) 【问题描述】        假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ...

    attack
  • 黑科技 | 厉害了数字桌面技术,让你的桌面瞬变超大触摸屏

    镁客网

扫码关注云+社区

领取腾讯云代金券