Bibliotecas R para aprendizado profundo


56

Eu queria saber se existem boas bibliotecas R por aí para redes neurais de aprendizado profundo? Eu sei que existe o nnet,, neuralnete RSNNS, mas nenhum deles parece implementar métodos de aprendizado profundo.

Estou especialmente interessado em não supervisionado, seguido de aprendizado supervisionado e no uso da evasão para impedir a co-adaptação .

/ edit: Após alguns anos, achei o pacote de aprendizado profundo h20 muito bem projetado e fácil de instalar. Também adoro o pacote mxnet , que é (um pouco) mais difícil de instalar, mas suporta coisas como covnets, roda em GPUs e é muito rápido.


11
Relacionados: stats.stackexchange.com/questions/40598/... Estes métodos são para o meu conhecimento não (publicamente) disponível em R.
— Momo

@ Momo: Obrigado pelo link. Existe algum código público C, C ++ ou fortran que possa ser chamado pelo R?
— Zach

4
Confira a biblioteca CUV ou Eblearn (mais aqui deeplearning.net/software_links ) As bibliotecas Python pode ser uma boa alternativa para R.
— Momo


veja implementar por R aqui .
— Patric

Respostas:


19

OpenSource h2o.deepLearning () é um pacote para deeplearning em R de h2o.ai, aqui está um artigo http://www.r-bloggers.com/things-to-try-after-user-part-1-deep-learning- com-h2o /

E 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

19

Existe um pacote chamado "darch"

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

Citação do CRAN:

darch: Pacote para arquiteturas profundas e máquinas de Bolzmann restrita

O pacote darch é construído com base no código da GE Hinton e RR Salakhutdinov (disponível no Código Matlab para redes de crenças profundas: última visita: 01.08.2013). Este pacote é para gerar redes neurais com muitas camadas (arquiteturas profundas) e treiná-las com o método introduzido pelas publicações "Um algoritmo de aprendizado rápido para redes de crenças profundas" (GE Hinton, S. Osindero, YW Teh) e "Reduzindo a dimensionalidade de dados com redes neurais "(GE Hinton, RR Salakhutdinov). Esse método inclui um pré-treinamento com o método de divergência contrastiva publicado por GE Hinton (2002) e um ajuste fino com algoritmos de treinamento conhecidos comuns, como retropropagação ou gradiente conjugado.


Apenas foi arquivado! :-(
— power

3
darch está de volta ao CRAN!
— Zach

Você encontrou algum exemplo para treinar uma profunda rede de crenças com este pacote e usá-lo para prever novos dados? Acho que a interface usada é muito pouco intuitiva.
— Zach

Não, eu não tenho. Não existem exemplos? Caso contrário, você pode publicá-las neste site e "responder sua própria pergunta" e obter mais pontos de reputação.
— poder

11
Vou publicá-las se encontrar alguma. Até agora, os documentos têm alguns exemplos de redes adequadas, mas nenhum exemplo de previsão. E alguns dos exemplos adequados têm bugs.
— Zach


12

Para responder à minha própria pergunta, escrevi um pequeno pacote no R para RBMs: https://github.com/zachmayer/rbm

Este pacote ainda está em desenvolvimento pesado, e eu sei muito pouco sobre RBMs, então gostaria de receber qualquer feedback (e solicitações de recebimento!) Que você tiver. Você pode instalar o pacote usando o devtools :

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

O código é semelhante à implementação de Andrew Landgraf na implementação de R e Edwin Chen em python , mas eu escrevi a função para ser semelhante à função pca na base R e incluir a funcionalidade de empilhamento. Eu acho que é um pouco mais amigável do que o pacote darch , que eu nunca consegui descobrir como usar (mesmo antes de ser removido do CRAN).

Se você tiver o pacote gputools instalado, poderá usar sua GPU para operações de matriz com a função rbm_gpu. Isso acelera bastante as coisas! Além disso, a maior parte do trabalho em um RBM é feita com operações de matriz, portanto, apenas a instalação de um bom BLAS, como o openBLAS , também acelerará bastante as coisas.

Aqui está o que acontece quando você executa o código no conjunto de dados de exemplo 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

11
Se você estiver usando o PCA, tente propack.svd()no svdpacote.
— potência

@power: Estou apenas usando o PCA como comparação, mas obrigado pela dica. irlba também é um excelente pacote para fazer svd.
— Zach

Seu novo pacote oferece o treinamento de "desistência"?
— DavideChicco.it

@ DavideChicco.it Sim, dê uma olhada no arquivo de ajuda ?rbm. Observe que as rbm não são supervisionadas.
— Zach

Zach incorpora redes neurais recorrentes? Esta é uma grande área para séries temporais que eu estava olhando para mudar para Python.
— Hidden Markov Model

11

Você pode experimentar o módulo Deep Learning do H2O, que é distribuído e oferece muitas técnicas avançadas, como regularização de abandono e taxa de aprendizado adaptável.

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

Tutoriais: http://learn.h2o.ai Dados e scripts: http://data.h2o.ai

Documentação: http://docs.h2o.ai GitBooks: http://gitbook.io/@h2o


Se você (o editor) for a mesma pessoa que o respondente original, mescle suas contas. Então você poderá editar suas próprias postagens. Você pode descobrir como mesclar suas contas em nossa Central de Ajuda .
— gung - Restabelece Monica

6

Para adicionar outra resposta:

O mxnet é incrível e eu adoro É um pouco difícil de instalar, mas suporta GPUs e várias CPUs. Se você for aprender profundamente em R (principalmente em imagens), recomendo que você comece com mxnet.


+1, sim, o mxnet é totalmente implementado por C ++ / CUDA, por isso é muito eficiente!
— Patric

5

Embora eu não tenha encontrado uma biblioteca dedicada de aprendizado profundo para o R, tive uma discussão semelhante sobre os r-blogueiros. A discussão se concentra no uso de RBM (Restricted Boltzman Machines). Dê uma olhada no seguinte link--

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

O autor realmente faz um bom trabalho de encapsular um algoritmo auto-implementado em R. Deve-se dizer que ainda não examinei a validade do código, mas pelo menos há um vislumbre de aprendizado profundo começando a aparecer em R.

Eu espero que isso ajude.


Também vi esse código-- obrigado por vincular a ele. É bom ver RBMs começando a aparecer no R, mas eu sinto que o R ainda está anos atrás do python em termos de aprendizado profundo. Eu adoraria ver algumas bibliotecas completas para redes neurais modernas!
— Zach

Eu ouvi você lá, Zach. Estou ansioso para me aprofundar no curso da Rede Neural de Hinton sobre o Coursera. O fascínio de Theano está me empurrando de cabeça para o Python novamente.
— Ardenne

Exatamente. Theano é muito atraente!
— Zach

Parece que o pacote gputools implementa algumas das operações da matriz gpu encontradas em theaono: cran.r-project.org/web/packages/gputools/index.html
— Zach

@ Zach, você quase não precisa gputoolse considere usar o truque de pré-carregamento no Linux para acelerar o GEMM, aqui .
— Patric

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.