MxNet+R︱用R语言实现深度学习(单CPU/API接口,一)
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接口,一)的更多相关文章
- R语言︱H2o深度学习的一些R语言实践——H2o包
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言H2o包的几个应用案例 笔者寄语:受启发 ...
- 碎片︱R语言与深度学习
笔者:受alphago影响,想看看深度学习,但是其在R语言中的应用包可谓少之又少,更多的是在matlab和python中或者是调用.整理一下目前我看到的R语言的材料: ---------------- ...
- R语言快速深度学习进行回归预测(转)
深度学习在过去几年,由于卷积神经网络的特征提取能力让这个算法又火了一下,其实在很多年以前早就有所出现,但是由于深度学习的计算复杂度问题,一直没有被广泛应用. 一般的,卷积层的计算形式为: 其中.x分别 ...
- 极限学习机︱R语言快速深度学习进行回归预测
本文转载于张聪的博客,链接:https://ask.hellobi.com/blog/zason/4543. 深度学习在过去几年,由于卷积神经网络的特征提取能力让这个算法又火了一下,其实在很多年以前早 ...
- 深度学习常用数据集 API(包括 Fashion MNIST)
基准数据集 深度学习中经常会使用一些基准数据集进行一些测试.其中 MNIST, Cifar 10, cifar100, Fashion-MNIST 数据集常常被人们拿来当作练手的数据集.为了方便,诸如 ...
- Flask框架学习笔记(API接口管理平台 V2.0)
博主今天把API接口管理平台发布到github了,这次是更新一些功能 如支持本地数据库sqlite3.优化了数据结构 技术方面跟之前V1.0相同,只增加生产本地数据:但是为了支持层级的参数,修改了数据 ...
- Flask框架学习笔记(API接口管理平台 V1.0)
今天博主终于完成了API接口管理平台,最后差的就是数据库的维护, 博主这里介绍下平台的设计原理,首先基于python,利用flask的web框架+bootstrap前端框架完成,先阶段完成了前台展示页 ...
- mxnet:结合R与GPU加速深度学习(转)
近年来,深度学习可谓是机器学习方向的明星概念,不同的模型分别在图像处理与自然语言处理等任务中取得了前所未有的好成绩.在实际的应用中,大家除了关心模型的准确度,还常常希望能比较快速地完成模型的训练.一个 ...
- mxnet:结合R与GPU加速深度学习
转载于统计之都,http://cos.name/tag/dmlc/,作者陈天奇 ------------------------------------------------------------ ...
随机推荐
- java的优势解读
1. java确定每种基本类型所占存储空间的大小.它们的大小不会像大多数语言那样随机器硬件架构的变化而变化.这种所占存储空间大小的不变性是java程序比用其他大多数语言编写的程序更具有可移植性的原因之 ...
- 分享我自己的一个最小化安装CentOS6的初始化脚本
在自己的虚拟机上使用的基于CentOS6的系统初始化脚本 #!/bin/bash # #Filename:system_init.sh #Description:系统安装完成后,对系统进行一些配置,以 ...
- 【机器学习实战 第九章】树回归 CART算法的原理与实现 - python3
本文来自<机器学习实战>(Peter Harrington)第九章"树回归"部分,代码使用python3.5,并在jupyter notebook环境中测试通过,推荐c ...
- Laravel (5.5.33) 加载过程(一)
说明: 由于公司项目使用Laravel 框架 也是第一次接触此框架 作为一个新手 记录使用过程的一些事情 以及对于框架源码分析的记录 整理自己的思路 也希望对大家有帮助 如果那里不对的地方 ...
- 深入理解Java内存模型之系列篇[转]
原文链接:http://blog.csdn.net/ccit0519/article/details/11241403 深入理解Java内存模型(一)——基础 并发编程模型的分类 在并发编程中,我们需 ...
- bzoj 2095: [Poi2010]Bridges [混合图欧拉回路]
2095: [Poi2010]Bridges 二分答案,混合图欧拉路判定 一开始想了一个上下界网络流模型,然后发现不用上下界网络流也可以 对于无向边,强制从\(u \rightarrow v\),计算 ...
- 【STL】c++ priority_queue的使用方法
最开始在项目文档看到priority_queue这个模板时,还以为是自己定义的呢,后来查了一下,原来这是STL中存在的一种优先队列. 1.最简单的使用方法 std::priority_queue< ...
- 【JavaWeb】JDBC连接MySQL数据库
正文之前 在之前写的JavaWeb项目中使用了JDBC,在此来回顾一下,并做个demo看看,先来看看JDBC的概念 Java数据库连接,(Java Database Connectivity,简称JD ...
- UEditor工具栏上自定义按钮、图标、事件和右击菜单添加自定义按钮
首先我要说是,举例说的这个版本是1.2以上的,因为一些配置代码转移到了zh-cn.js里,其他没有变化.开门见山直接写:(我自定义的是在线美图功能) 第一步:找到ueditor.config.js文件 ...
- QT开发应用程序的欢迎界面
主界面启动太慢,通常要10秒以上,所以想加个欢迎界面,等程序加载好再显示主界面. 主界面(类名为MainWindow)启动慢的原因是构造函数需要执行大量初始化的工作. 创建了Welcome类作为欢迎界 ...