56 votos

Bibliotecas R para el aprendizaje profundo

Me preguntaba si hay alguna buena biblioteca de R para redes neuronales de aprendizaje profundo. Sé que hay el nnet , neuralnet y RSNNS pero ninguno de ellos parece aplicar métodos de aprendizaje profundo.

Me interesa especialmente el aprendizaje no supervisado, seguido del supervisado, y utilizar el abandono para evitar la coadaptación .

/edición: Después de algunos años, he encontrado el paquete de aprendizaje profundo h20 muy bien diseñado y fácil de instalar. También me encanta el paquete mxnet que es (un poco) más difícil de instalar pero soporta cosas como covnets, funciona en GPUs y es realmente rápido.

1 votos

Relacionado: stats.stackexchange.com/questions/40598/ Que yo sepa, estos métodos no están disponibles (públicamente) en R.

0 votos

@Momo: Gracias por el enlace. Hay algún código público en C, C++, o fortran que pueda ser llamado desde R?

4 votos

Consulta la biblioteca de CUV o Eblearn (más información aquí deeplearning.net/software_links ) Las librerías de Python podrían ser una buena alternativa a R.

19voto

power Puntos 728

Hay un paquete llamado "darch"

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

Cita de CRAN:

darch: Paquete para arquitecturas profundas y máquinas de Bolzmann restringidas

El paquete darch está construido sobre la base del código de G. E. Hinton y R. R. Salakhutdinov (disponible en Matlab Code for deep belief nets : última visita: 01.08.2013). Este paquete sirve para generar redes neuronales con muchas capas (arquitecturas profundas) y entrenarlas con el método introducido por las publicaciones "A fast learning algorithm for deep belief nets" (G. E. Hinton, S. Osindero, Y. W. Teh) y "Reducing the dimensionality of data with neural networks" (G. E. Hinton, R. R. Salakhutdinov). Este método incluye un entrenamiento previo con el método de divergencia contrastiva publicado por G.E Hinton (2002) y un con algoritmos de entrenamiento conocidos como la retropropagación o el gradiente conjugado. o el gradiente conjugado.

0 votos

Acaba de ser archivado! :-(

3 votos

¡darch vuelve a estar en CRAN!

0 votos

¿Has encontrado algún ejemplo para entrenar una red de creencia profunda con este paquete y luego usarla para predecir sobre nuevos datos? La interfaz que utiliza me parece muy poco intuitiva.

19voto

meatvest Puntos 426

OpenSource h2o.deepLearning() es un paquete para el aprendizaje profundo en R de h2o.ai aquí hay un resumen http://www.r-bloggers.com/things-to-try-after-user-part-1-deep-learning-with-h2o/

Y el código: 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

13voto

Boris Tsirelson Puntos 191

Hay otro paquete nuevo para redes profundas en R: red profunda

Todavía no he probado a utilizarlo, pero ya se ha incorporado al caret paquete.

12voto

Boris Tsirelson Puntos 191

Para responder a mi propia pregunta, escribí un pequeño paquete en R para RBM: https://github.com/zachmayer/rbm

Este paquete está todavía en fase de desarrollo, y sé muy poco acerca de los RBMs, por lo que agradecería cualquier comentario (¡y petición de pull!) que tengas. Puedes instalar el paquete usando devtools :

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

El código es similar a Implementación de Andrew Landgraf en R y Implementación de Edwin Chen en python pero escribí la función para que fuera similar a la función pca en R base e incluyera la funcionalidad para el apilamiento. Creo que es un poco más fácil de usar que la función paquete darch que nunca pude averiguar cómo utilizar (incluso antes de que fuera retirado de CRAN).

Si tiene el paquete gputools instalado puedes usar tu GPU para las operaciones matriciales con la función rbm_gpu. Esto acelera mucho las cosas. Además, la mayor parte del trabajo en un RBM se realiza con operaciones matriciales, por lo que basta con instalar un buen BLAS, como openBLAS también acelerará mucho las cosas.

Esto es lo que ocurre cuando se ejecuta el código en el conjunto de datos de ejemplo de 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 votos

Si utiliza PCA, intente propack.svd() de la svd paquete.

0 votos

@power: Sólo estoy usando PCA como comparación, pero gracias por el consejo. irlba es también un excelente paquete para hacer svd.

0 votos

¿Su nuevo paquete proporciona la formación de "abandono"?

11voto

brendanjerwin Puntos 767

Puedes probar el módulo de Aprendizaje Profundo de H2O, es distribuido y ofrece muchas técnicas avanzadas como la regularización del abandono y la tasa de aprendizaje adaptativa.

Diapositivas: http://www.slideshare.net/0xdata/h2o-deeplearning-nextml Vídeo: https://www.youtube.com/watch?v=gAKbAQu900w&feature=youtu.be

Tutoriales: http://learn.h2o.ai Datos y guiones: http://data.h2o.ai

Documentación: http://docs.h2o.ai GitBooks: http://gitbook.io/@h2o

0 votos

Si usted (el editor) es la misma persona que el contestador original, por favor, fusione sus cuentas. Así podrá editar sus propios mensajes. Puedes encontrar información sobre cómo fusionar tus cuentas en nuestro centro de ayuda .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X