MxNet有了亚马逊站台之后,声势大涨,加之接口多样化,又支持R语言所以一定要学一下。而且作为R语言的fans,为啥咱们R语言就不能上深度学习嘞~

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

一、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)

MxNet+R︱用R语言实现深度学习(单CPU/API接口,一)的更多相关文章

  1. R语言︱H2o深度学习的一些R语言实践——H2o包

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言H2o包的几个应用案例 笔者寄语:受启发 ...

  2. 碎片︱R语言与深度学习

    笔者:受alphago影响,想看看深度学习,但是其在R语言中的应用包可谓少之又少,更多的是在matlab和python中或者是调用.整理一下目前我看到的R语言的材料: ---------------- ...

  3. R语言快速深度学习进行回归预测(转)

    深度学习在过去几年,由于卷积神经网络的特征提取能力让这个算法又火了一下,其实在很多年以前早就有所出现,但是由于深度学习的计算复杂度问题,一直没有被广泛应用. 一般的,卷积层的计算形式为: 其中.x分别 ...

  4. 极限学习机︱R语言快速深度学习进行回归预测

    本文转载于张聪的博客,链接:https://ask.hellobi.com/blog/zason/4543. 深度学习在过去几年,由于卷积神经网络的特征提取能力让这个算法又火了一下,其实在很多年以前早 ...

  5. 深度学习常用数据集 API(包括 Fashion MNIST)

    基准数据集 深度学习中经常会使用一些基准数据集进行一些测试.其中 MNIST, Cifar 10, cifar100, Fashion-MNIST 数据集常常被人们拿来当作练手的数据集.为了方便,诸如 ...

  6. Flask框架学习笔记(API接口管理平台 V2.0)

    博主今天把API接口管理平台发布到github了,这次是更新一些功能 如支持本地数据库sqlite3.优化了数据结构 技术方面跟之前V1.0相同,只增加生产本地数据:但是为了支持层级的参数,修改了数据 ...

  7. Flask框架学习笔记(API接口管理平台 V1.0)

    今天博主终于完成了API接口管理平台,最后差的就是数据库的维护, 博主这里介绍下平台的设计原理,首先基于python,利用flask的web框架+bootstrap前端框架完成,先阶段完成了前台展示页 ...

  8. mxnet:结合R与GPU加速深度学习(转)

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

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

    转载于统计之都,http://cos.name/tag/dmlc/,作者陈天奇 ------------------------------------------------------------ ...

随机推荐

  1. diff和patch命令(1)

    1. diff是对两个集合的差运算,patch是对两个集合的和运算. 2. diff以逐行的方式,比较文本文件的异同处.所是指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录 ...

  2. 知识点干货—多线程同步【6】之synchronized

    "明日复明日,明日何其多. 我生待明日,万事成蹉跎. 世人若被明日累,春去秋来老将至. 朝看水东流,暮看日西坠. 百年明日能几何?请君听我明日歌. 明日复明日,明日何其多! 日日待明日,万世 ...

  3. Audio Unit 基础

    如图所示,所有 iOS 音频技术都是基于 audio units.此处显示的更高级别的技术,如 Media Player,AV Foundation,OpenAL,AudioToolbox,是对 au ...

  4. Jquery之isPlainObject源码分析

    今天对Jquery中 isPlainObject 源码分析. 1.  isPlainObject 方法的作用: 用来判断传入参数,是否是对象. 2. 源码分析:isPlainObject: funct ...

  5. 【转】如何解决plsql查询oracle数据库语句where条件带有中文无法匹配结果

    一.问题描述 之前使用PLSQL查询oracle数据库可以正常查询统计结果,由于换了个电脑,重新安装之后,同样的sql查询语句同一个数据库,无法正常查询结果,如下图所示 二.解决办法 1. 查询数据当 ...

  6. WPF 圆角输入框

    今天打算来做一个圆角的输入框 默认输入框: 这个输入框不好看,并且在XP 跟 WIN 7  WIN10 效果 都不太一样 我们今天不用模板的方式,而是 最简单的方式 来实现 圆角 输入框: ----- ...

  7. 一个Windows下线程池的实现(C++)

    前言 本文配套代码:https://github.com/TTGuoying/ThreadPool 先看看几个概念: 线程:进程中负责执行的执行单元.一个进程中至少有一个线程. 多线程:一个进程中有多 ...

  8. php+redis 学习 五 消息推送

    <?php header('content-type:text/html;chaeset=utf-8'); /** * redis实战 * * 发布 * * @example php publi ...

  9. EL表达式多条件判断方式

    <td> <c:forEach items="${cityMap}" var="entry"> <hr> <input ...

  10. PHP7的新功能

    [转自:http://www.yiibai.com/php7/ ]   [PHP7标量类型声明] 在PHP7,一个新的功能,标量类型声明已被引入.标量类型声明有两种选择方式 - 强制方式- 强制性是默 ...