Biblioteki R do głębokiego uczenia się

56

Zastanawiałem się, czy są jakieś dobre biblioteki R do głębokiego uczenia sieci neuronowych? Wiem, że tam jest nnet, neuralneti RSNNS, ale żaden z nich nie wydają się wdrożyć głębokie metod nauczania.

Szczególnie interesuje mnie nauka bez nadzoru, a następnie nadzorowane uczenie się, a także rezygnacja z pracy, aby zapobiec wspólnej adaptacji .

/ edit: Po kilku latach odkryłem, że pakiet dogłębnej nauki h20 jest bardzo dobrze zaprojektowany i łatwy w instalacji. Uwielbiam także pakiet mxnet , który jest (trochę) trudniejszy do zainstalowania, ale obsługuje takie rzeczy jak covnets, działa na GPU i jest naprawdę szybki.

Zach
źródło
1
Powiązane: stats.stackexchange.com/questions/40598/... Według mnie, metody te nie są (publicznie) dostępne w R.
Momo
@Momo: Dzięki za link. Czy jest jakiś publiczny kod C, C ++ lub fortran, który można wywoływać z R?
Zach.
4
Sprawdź bibliotekę CUV lub Eblearn (więcej tutaj deeplearning.net/software_links ) Biblioteki Pythona mogą być dobrą alternatywą dla R.
Momo
patrz implementacja przez R tutaj .
Patric

Odpowiedzi:

19

OpenSource h2o.deepLearning () to pakiet do głębokiego uczenia się w języku R z h2o.ai oto http://www.r-bloggers.com/things-to-try-after-user-part-1-deep-learning- z-H2O /

I kod: 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
SriSatish Ambati
źródło
19

Istnieje pakiet o nazwie „darch”

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

Cytat z CRAN:

darch: Pakiet dla głębokich architektur i maszyn Restricted-Bolzmann-Machines

Pakiet darch jest budowany na podstawie kodu GE Hinton i RR Salakhutdinov (dostępny w Matlab Code dla sieci głębokiego przekonania: ostatnia wizyta: 01.08.2013). Pakiet ten służy do generowania sieci neuronowych o wielu warstwach (głębokie architektury) i trenowania ich za pomocą metody wprowadzonej przez publikacje „Algorytm szybkiego uczenia się dla sieci głębokiej wiary” (GE Hinton, S. Osindero, YW Teh) i „Zmniejszenie wymiarów danych w sieciach neuronowych ”(GE Hinton, RR Salakhutdinov). Ta metoda obejmuje wstępne szkolenie z kontrastową metodą dywergencji opublikowaną przez GE Hinton (2002) oraz precyzyjne dostrojenie za pomocą powszechnie znanych algorytmów treningowych, takich jak propagacja wsteczna lub gradient sprzężony.

moc
źródło
Właśnie zostało zarchiwizowane! :-(
moc
3
darch powraca do CRAN!
Zach
Czy znalazłeś jakieś przykłady szkolenia sieci głębokiej wiary w tym pakiecie, a następnie wykorzystania jej do przewidywania nowych danych? Uważam, że interfejs, którego używa, jest bardzo nieintuicyjny.
Zach
Nie, nie mam. Nie ma przykładów? Jeśli nie, możesz opublikować je na tej stronie i „odpowiedzieć na własne pytanie” i zdobyć więcej punktów reputacji.
moc
1
Wyślę je, jeśli je znajdę. Jak dotąd dokumenty zawierają kilka przykładów dopasowania sieci, ale nie ma żadnych przykładów prognoz. A niektóre z pasujących przykładów zawierają błędy.
Zach
13

W R: deepnet istnieje kolejny nowy pakiet dla sieci głębokich

Nie próbowałem go jeszcze używać, ale został już włączony do pakietu Caret .

Zach
źródło
12

Aby odpowiedzieć na moje pytanie, napisałem mały pakiet w R dla RBM: https://github.com/zachmayer/rbm

Ten pakiet jest wciąż intensywnie rozwijany i niewiele wiem o RBM, więc chętnie przyjmę wszelkie opinie (i prośby o ściągnięcie)! Możesz zainstalować pakiet za pomocą devtools :

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

Kod jest podobny do implementacji Andrew Landgrafa w R i implementacji Edwina Chena w pythonie , ale napisałem tę funkcję, aby była podobna do funkcji pca w bazie R i zawierała funkcję stosową. Myślę, że jest trochę bardziej przyjazny dla użytkownika niż pakiet darch , którego nigdy nie mogłem wymyślić, jak go używać (nawet zanim został usunięty z CRAN).

Jeśli masz zainstalowany pakiet gputools , możesz używać swojego GPU do operacji macierzowych za pomocą funkcji rbm_gpu. To bardzo przyspiesza! Co więcej, większość pracy w RBM jest wykonywana przy użyciu operacji matrycowych, więc samo zainstalowanie dobrego BLAS, takiego jak openBLAS , również znacznie przyspieszy.

Oto, co dzieje się po uruchomieniu kodu na przykładowym zestawie danych Edwina:

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
Zach
źródło
1
Jeśli używasz PCA, spróbuj propack.svd()z svdpakietu.
moc
@power: Używam PCA jako porównania, ale dziękuję za podpowiedź. irlba to także doskonały pakiet do robienia DVD.
Zach
Czy twój nowy pakiet zapewnia szkolenie „porzucania”?
DavideChicco.it
@ DavideChicco.it Tak, spójrz na plik pomocy dla ?rbm. Zauważ, że rbm nie są nadzorowane.
Zach
Zach czy to obejmuje Recurrent Neural Networks? Jest to duży obszar dla szeregów czasowych, dla którego chciałem przejść do Pythona.
Ukryty model Markowa
11

Możesz wypróbować moduł głębokiego uczenia H2O, jest on dystrybuowany i oferuje wiele zaawansowanych technik, takich jak regularyzacja rezygnacji i adaptacyjna szybkość uczenia się.

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

Samouczki: http://learn.h2o.ai Dane i skrypty: http://data.h2o.ai

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

Arno
źródło
Jeśli Ty (redaktor) jesteś tą samą osobą, co oryginalny odpowiadający, połącz swoje konta. Następnie będziesz mógł edytować własne posty. Informacje na temat łączenia kont można znaleźć w naszym centrum pomocy .
gung - Przywróć Monikę
6

Aby dodać kolejną odpowiedź:

mxnet jest niesamowity i uwielbiam go . Trochę trudno go zainstalować, ale obsługuje procesory graficzne i wiele procesorów. Jeśli zamierzasz przeprowadzić głęboką naukę w języku R (szczególnie na obrazach), zdecydowanie polecam zacząć od mxnet.

Zach
źródło
+1, tak, mxnet jest całkowicie zaimplementowany przez C ++ / CUDA, więc jest bardzo wydajny!
Patric
5

Chociaż nie spotkałem dedykowanej biblioteki do głębokiego uczenia się dla R, spotkałem się z podobną dyskusją na temat r-blogerów. Dyskusje koncentrują się na korzystaniu z RBM (Restricted Boltzman Machines). Spójrz na poniższy link -

http://www.r-bloggers.com/restricted-boltzmann-machines-in-r/ (opublikowane na stronie „alandgraf.blogspot.com”)

Autor faktycznie wykonuje naprawdę dobrą robotę enkapsulacji samozrealizowanego algorytmu w R. Trzeba powiedzieć, że nie sprawdziłem jeszcze poprawności kodu, ale przynajmniej jest pewien błysk głębokiego uczenia się, który zaczyna się pokazywać w R.

Mam nadzieję, że to pomoże.

Ardeny
źródło
Widziałem też ten kod - dziękuję za link do niego. Dobrze jest widzieć, że RBM zaczynają pojawiać się w R, ale wydaje mi się, że R wciąż jest o wiele lat za Pythonem pod względem głębokiego uczenia się. Chciałbym zobaczyć kilka pełnych bibliotek dla nowoczesnych sieci neuronowych!
Zach
Słyszę cię tam Zach. Nie mogę się doczekać, aby głębiej poznać kurs sieci neuronowej Hintona na Coursera. Urok Theano ponownie popycha mnie do Pythona.
Ardenne
Dokładnie. Theano jest bardzo pociągający!
Zach
Wygląda na to, że pakiet gputools implementuje niektóre operacje macierzy GPU znalezione w theaono: cran.r-project.org/web/packages/gputools/index.html
Zach
@Zach, którego prawie nie potrzebujesz gputoolsi rozważ użycie sztuczki wstępnego ładowania w systemie Linux, aby przyspieszyć GEMM, tutaj .
Patric