Librerie R per l'apprendimento profondo


56

Mi chiedevo se ci sono buone librerie R là fuori per le reti neurali di apprendimento profondo? So che c'è il nnet, neuralnete RSNNS, ma nessuno di questi sembra implementare metodi di apprendimento profondo.

Sono particolarmente interessato a un apprendimento non supervisionato seguito da un apprendimento supervisionato e all'utilizzo del dropout per prevenire il coadattamento .

/ modifica: dopo alcuni anni, ho trovato il pacchetto di apprendimento profondo h20 molto ben progettato e facile da installare. Adoro anche il pacchetto mxnet , che è (un po ') più difficile da installare ma supporta cose come le covnet, gira su GPU ed è molto veloce.


1
Correlati: stats.stackexchange.com/questions/40598/… Questi metodi sono a mia conoscenza non (pubblicamente) disponibili in R.
— Momo

@Momo: grazie per il link. Esiste un codice C, C ++ o fortran pubblico che può essere richiamato da R?
— Zach,

4
Dai un'occhiata alla libreria CUV o Eblearn (altro qui deeplearning.net/software_links ) Le librerie Python potrebbero essere una buona alternativa a R.
— Momo,


vedi attrezzo di R qui .
— Patric,

Risposte:


19

OpenSource h2o.deepLearning () è un pacchetto per l'apprendimento profondo in R da h2o.ai ecco un articolo di scrittura http://www.r-bloggers.com/things-to-try-after-user-part-1-deep-learning- con-H2O /

E codice: 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

C'è un pacchetto chiamato "darch"

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

Citazione da CRAN:

darch: pacchetto per architetture profonde e macchine con restrizioni di Bolzmann

Il pacchetto darch è costruito sulla base del codice di GE Hinton e RR Salakhutdinov (disponibile sotto il Codice Matlab per reti di credenze profonde: ultima visita: 01.08.2013). Questo pacchetto serve a generare reti neurali con molti livelli (architetture profonde) e ad addestrarle con il metodo introdotto dalle pubblicazioni "Un algoritmo di apprendimento rapido per reti di credenze profonde" (GE Hinton, S. Osindero, YW Teh) e "Ridurre la dimensionalità di dati con reti neurali "(GE Hinton, RR Salakhutdinov). Questo metodo include un pre-allenamento con il metodo della divergenza contrastante pubblicato da GE Hinton (2002) e una messa a punto con algoritmi di allenamento noti come backpropagation o gradiente coniugato.


È appena stato archiviato! :-(
— potenza

3
darch è tornato su CRAN!
— Zach,

Hai trovato degli esempi per addestrare una rete di credenze profonde con questo pacchetto e poi utilizzarlo per prevedere nuovi dati? Trovo che l'interfaccia che utilizza sia molto intuitiva.
— Zach,

No non l'ho fatto. Non ci sono esempi? In caso contrario, puoi pubblicarli su questo sito e "rispondere alla tua domanda" e ottenere più punti reputazione.
— potere

1
Li posterò se ne trovo qualcuno. Finora i documenti hanno alcuni esempi di adattamento delle reti, ma nessun esempio di previsione. E alcuni degli esempi giusti hanno dei bug.
— Zach,


12

Per rispondere alla mia domanda, ho scritto un piccolo pacchetto in R per RBM: https://github.com/zachmayer/rbm

Questo pacchetto è ancora in fase di sviluppo, e so molto poco sugli RBM, quindi accetterei con favore qualsiasi feedback (e richieste pull!) Che hai. Puoi installare il pacchetto usando devtools :

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

Il codice è simile all'implementazione di Andrew Landgraf in R e dell'implementazione di Edwin Chen in Python , ma ho scritto che la funzione è simile alla funzione pca nella base R e include funzionalità per lo stacking. Penso che sia un po 'più user-friendly rispetto al pacchetto darch , che non sono mai riuscito a capire come usare (anche prima che fosse rimosso da CRAN).

Se hai installato il pacchetto gputools puoi usare la tua GPU per operazioni a matrice con la funzione rbm_gpu. Questo accelera molto le cose! Inoltre, la maggior parte del lavoro in un RBM è fatto con operazioni a matrice, quindi solo l'installazione di un buon BLAS, come openBLAS , velocizzerà molto le cose.

Ecco cosa succede quando si esegue il codice sul set di dati di esempio di 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
Se stai usando PCA, prova propack.svd()dal svdpacchetto.
— potenza

@power: sto solo usando PCA come confronto, ma grazie per il suggerimento. irlba è anche un pacchetto eccellente per fare svd.
— Zach,

Il tuo nuovo pacchetto fornisce la formazione "dropout"?
— DavideChicco.it,

@ DavideChicco.it Sì, dai un'occhiata al file di aiuto per ?rbm. Si noti che i rbm non sono supervisionati.
— Zach,

Zach incorpora le reti neurali ricorrenti? Questa è una grande area per le serie storiche che stavo cercando di passare a Python.
— Modello Markov nascosto,

11

Puoi provare il modulo Deep Learning di H2O, è distribuito e offre molte tecniche avanzate come la regolarizzazione dei dropout e il tasso di apprendimento adattivo.

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

Tutorial: http://learn.h2o.ai Dati e script: http://data.h2o.ai

Documentazione: http://docs.h2o.ai GitBooks: http://gitbook.io/@h2o


Se tu (l'editore) sei la stessa persona del risponditore originale, unisci i tuoi account. Quindi sarai in grado di modificare i tuoi post. Puoi scoprire come unire i tuoi account nel nostro Centro assistenza .
— gung - Ripristina Monica

6

Per aggiungere un'altra risposta:

mxnet è fantastico e lo adoro È un po 'difficile da installare, ma supporta GPU e CPU multiple. Se hai intenzione di fare un apprendimento approfondito in R (in particolare sulle immagini), ti consiglio vivamente di iniziare con mxnet.


+1, sì mxnet è totalmente implementato da C ++ / CUDA quindi è molto efficiente!
— Patric

5

Anche se non ho incontrato una libreria di deep learning dedicata per R, mi sono imbattuto in una discussione simile su r-blogger. La discussione è incentrata sull'uso di RBM (Restricted Boltzman Machines). Dai un'occhiata al seguente link:

http://www.r-bloggers.com/restricted-boltzmann-machines-in-r/ (ripubblicato da 'alandgraf.blogspot.com')

L'autore fa davvero un ottimo lavoro nell'incapsulare un algoritmo auto-implementato in R. Va detto che non ho ancora verificato la validità del codice ma almeno c'è un barlume di apprendimento profondo che inizia a mostrare in R.

Spero che questo possa essere d'aiuto.


Ho visto anche questo codice, grazie per il collegamento ad esso. È bello vedere gli RBM che iniziano a presentarsi in R, ma sento che R è ancora indietro di anni in pitone in termini di apprendimento profondo. Mi piacerebbe vedere alcune librerie complete per le moderne reti neurali!
— Zach,

Ti sento lì Zach. Non vedo l'ora di approfondire il corso sulla Rete neurale di Hinton a Coursera. Il fascino di Theano mi sta spingendo di nuovo a fondo in Python.
— Ardenne,

Esattamente. Theano è molto affascinante!
— Zach

Sembra che il pacchetto gputools implementa alcune delle operazioni della matrice gpu trovate nel theaono: cran.r-project.org/web/packages/gputools/index.html
— Zach,

@Zach quasi non ti serve gputoolse considera l'uso del trucco di precaricamento su Linux per accelerare GEMM, qui .
— Patric

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.