用于深度学习的R库


56

我想知道是否有用于深度学习神经网络的良好R库?我知道还有的nnetneuralnet以及RSNNS,但没有这些似乎实现深度学习方法。

我对无监督学习,然后进行有监督学习,以及使用辍学防止共同适应特别感兴趣。

/ edit:几年后,我发现h20深度学习软件包设计精良且易于安装。我也喜欢mxnet软件包,该软件包安装起来有点困难,但支持像covnets这样的东西,可以在GPU上运行,而且速度非常快。


1
相关阅读:stats.stackexchange.com/questions/40598/...这些方法就我所知,没有(公开)提供R.
沫沫

@Momo:感谢您的链接。是否可以从R调用任何公共的C,C ++或fortran代码?
Zach 2012年

4
退房CUV库或Eblearn(更多在这里deeplearning.net/software_links)Python的库可能是一个很好的替代R.
莫莫


看到由R实现这里
Patric

Answers:


19

OpenSource h2o.deepLearning()是用于从h2o.ai在R中进行深度学习的软件包。与-h2o /

和代码:https : //gist.github.com/woobe/3e728e02f6cc03ab86d8#file-link_data-r

######## *Convert Breast Cancer data into H2O*
dat <- BreastCancer[, -1]  # remove the ID column
dat_h2o <- as.h2o(localH2O, dat, key = 'dat')

######## *Import MNIST CSV as H2O*
dat_h2o <- h2o.importFile(localH2O, path = ".../mnist_train.csv")

######## *Using the DNN model for predictions*
h2o_yhat_test <- h2o.predict(model, test_h2o)

######## *Converting H2O format into data frame*
df_yhat_test <- as.data.frame(h2o_yhat_test)

######## Start a local cluster with 2GB RAM
library(h2o)
localH2O = h2o.init(ip = "localhost", port = 54321, startH2O = TRUE, 
                    Xmx = '2g') 
########Execute deeplearning

model <- h2o.deeplearning( x = 2:785,  # column numbers for predictors
               y = 1,   # column number for label
               data = train_h2o, # data in H2O format
               activation = "TanhWithDropout", # or 'Tanh'
               input_dropout_ratio = 0.2, # % of inputs dropout
               hidden_dropout_ratios = c(0.5,0.5,0.5), # % for nodes dropout
               balance_classes = TRUE, 
               hidden = c(50,50,50), # three layers of 50 nodes
               epochs = 100) # max. no. of epochs

19

有一个名为“ darch”的软件包

http://cran.um.ac.ir/web/packages/darch/index.html

引用来自CRAN:

darch:用于深度架构和受限玻尔兹曼机器的软件包

darch软件包基于GE Hinton和RR Salakhutdinov的代码构建(可在Matlab代码下获得深层信任网:最后一次访问:2013年8月1日)。该软件包用于生成具有多个层(深度体系结构)的神经网络,并使用出版物“深度信念网络的快速学习算法”(GE Hinton,S。Osindero,YW Teh)和“降低维数”引入的方法对其进行训练。神经网络进行数据分析”(GE Hinton,RR Salakhutdinov)。此方法包括使用由GE Hinton(2002)发布的对比发散方法进行的预训练,以及使用诸如反向传播或共轭梯度之类的众所周知的训练算法进行的微调。


它刚刚被存档!:-(
功率

3
darch又回到了CRAN!
扎克2014年

您是否找到了使用此程序包训练深度信任网络,然后使用它来预测新数据的示例?我发现它使用的界面非常不直观。
扎克2014年

不,我没有。没有例子吗?如果不是,那么您可以将其发布在此网站上并“回答您自己的问题”,并获得更多的声誉分数。
功率

1
如果发现任何问题,我会张贴它们。到目前为止,文档中有一些拟合网络的示例,但没有预测的示例。并且一些合适的示例存在错误。
Zach 2014年


12

为了回答我自己的问题,我在R中为RBM编写了一个小程序包:https : //github.com/zachmayer/rbm

该软件包仍在大量开发中,我对RBM知之甚少,因此,我欢迎您提供任何反馈(并提出要求!)。您可以使用devtools安装软件包:

devtools:::install_github('zachmayer/rbm')
library(rbm)
?rbm
?rbm_gpu
?stacked_rbm

该代码类似于R中的Andrew Landgraf的实现python中的Edwin Chen的实现,但是我编写的函数类似于基本R中的pca函数,并包含用于堆栈的功能。我认为它比darch包更具用户友好性,我永远无法弄清楚它的使用方式(甚至在将其从CRAN中删除之前)。

如果安装了gputools软件包,则可以通过rbm_gpu函数将GPU用于矩阵运算。这大大加快了速度!此外,RBM中的大多数工作都是通过矩阵运算完成的,因此仅安装良好的BLAS(例如openBLAS)也可以大大加快速度。

在Edwin的示例数据集上运行代码时,将发生以下情况:

set.seed(10)
print('Data from: https://github.com/echen/restricted-boltzmann-machines')
Alice <- c('Harry_Potter' = 1, Avatar = 1, 'LOTR3' = 1, Gladiator = 0, Titanic = 0, Glitter = 0) #Big SF/fantasy fan.
Bob <- c('Harry_Potter' = 1, Avatar = 0, 'LOTR3' = 1, Gladiator = 0, Titanic = 0, Glitter = 0) #SF/fantasy fan, but doesn't like Avatar.
Carol <- c('Harry_Potter' = 1, Avatar = 1, 'LOTR3' = 1, Gladiator = 0, Titanic = 0, Glitter = 0) #Big SF/fantasy fan.
David <- c('Harry_Potter' = 0, Avatar = 0, 'LOTR3' = 1, Gladiator = 1, Titanic = 1, Glitter = 0) #Big Oscar winners fan.
Eric <- c('Harry_Potter' = 0, Avatar = 0, 'LOTR3' = 1, Gladiator = 1, Titanic = 0, Glitter = 0) #Oscar winners fan, except for Titanic.
Fred <- c('Harry_Potter' = 0, Avatar = 0, 'LOTR3' = 1, Gladiator = 1, Titanic = 1, Glitter = 0) #Big Oscar winners fan.
dat <- rbind(Alice, Bob, Carol, David, Eric, Fred)

#Fit a PCA model and an RBM model
PCA <- prcomp(dat, retx=TRUE)
RBM <- rbm_gpu(dat, retx=TRUE, num_hidden=2)

#Examine the 2 models
round(PCA$rotation, 2) #PCA weights
    round(RBM$rotation, 2) #RBM weights

1
如果您使用的是PCA,请propack.svd()svd包装中尝试。
功率

@power:我只是将PCA用作比较,但感谢您的提示。irlba也是做svd的绝佳软件包。
2014年

您的新软件包是否提供“辍学”培训?
DavideChicco.it,2015年

@ DavideChicco.it是的,看看的帮助文件?rbm。请注意,rbm是不受监督的。
扎克

Zach是否合并了递归神经网络?这是我打算转向Python的时间序列的重要领域。
隐藏的马尔可夫模型

11

您可以尝试H2O的深度学习模块,它是分布式的,并提供许多先进的技术,例如辍学正则化和自适应学习率。

幻灯片:http//www.slideshare.net/0xdata/h2o-deeplearning-nextml视频:https//www.youtube.com/watch?v = gAKbAQu900w&feature = youtu.be

教程:http//learn.h2o.ai 数据和脚本:http//data.h2o.ai

文档:http : //docs.h2o.ai GitBooks:http : //gitbook.io/@h2o


如果您(编辑)与原始答复者是同一个人,请合并您的帐户。然后,您将可以编辑自己的帖子。您可以在我们的帮助中心中找到有关合并帐户的信息。
gung-恢复莫妮卡

6

要添加另一个答案:

mxnet很棒,我喜欢它 ,安装起来有点困难,但是它支持GPU和多个CPU。如果您打算在R中进行深度学习(尤其是在图像上),我强烈建议您从mxnet开始。


+1,是的,mxnet完全由C ++ / CUDA实现,因此非常高效!
Patric's

5

虽然我还没有遇到专门针对R的深度学习库,但是我在r-blogger上遇到了类似的讨论。讨论集中在使用RBM(受限玻尔兹曼机)上。看一下以下链接-

http://www.r-bloggers.com/restricted-boltzmann-machines-in-r/(从“ alandgraf.blogspot.com”转发)

实际上,作者在R中封装了一个自我实现的算法确实做得非常好。必须说,我尚未审查代码的有效性,但至少在R中开始有深度学习的一瞥。

我希望这有帮助。


我也看过这段代码-感谢您链接到它。很高兴看到RBM开始出现在R中,但我觉得R在深度学习方面仍然比python落后多年。我希望看到一些功能齐全的现代神经网络库!
扎克

我在扎克那里听到你的声音。我期待着在Coursera上更深入了解Hinton的神经网络课程。Theano的魅力再次将我逼入Python。
阿登,

究竟。Theano非常诱人!
扎克

似乎gputools软件包实现了在theaono中找到的一些gpu矩阵操作:cran.r-project.org/web/packages/gputools/index.html
Zach

@Zach你几乎不需要gputools,并考虑在Linux上使用预紧招加速GEMM,在这里
Patric's

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.