用于深度学习的 R 库

机器算法验证 r 神经网络 深度学习 受限玻尔兹曼机 深度信念网络
2022-01-17 06:34:21

我想知道是否有任何用于深度学习神经网络的好的 R 库?我知道有nnetneuralnetRSNNS,但这些似乎都没有实现深度学习方法。

我对无监督学习和监督学习以及使用 dropout 防止共同适应特别感兴趣。

/edit:几年后,我发现h20 深度学习包设计得非常好,易于安装。我也喜欢mxnet 包,它(有点)难以安装,但支持 covnets 之类的东西,在 GPU 上运行,而且速度非常快。

4个回答

OpenSource h2o.deepLearning() 是来自 h2o.ai 的 R 深度学习包,这里有一篇文章http://www.r-bloggers.com/things-to-try-after-user-part-1-deep-learning-与-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

有一个名为“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) 发布的对比散度方法进行预训练,以及使用常见的已知训练算法(如反向传播或共轭梯度)进行微调。

R 中还有另一个用于深度网络的新包:deepnet

我还没有尝试使用它,但它已经被合并到caret包中。

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

这个包仍在大力开发中,我对 RBM 知之甚少,所以我欢迎您提出任何反馈(和拉取请求!)。您可以使用devtools安装该软件包

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

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

如果你安装了gputools 包,你可以使用你的 GPU 通过 rbm_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