R語言基于Keras的MLP神經(jīng)網(wǎng)絡(luò)及環(huán)境搭建
Intro
R語言是我使用的第一種計(jì)算機(jī)語言,也是目前的主流數(shù)據(jù)分析語言之一,常常被人與python相比較。在EDA,制圖和機(jī)器學(xué)習(xí)方面R語言擁有很多的的package可供選擇。但深度學(xué)習(xí)方面由于缺少學(xué)習(xí)庫以及合適的框架而被python趕超。但Keras在R語言上的發(fā)布使得兩種語言再次打成平手。
此文章使用Tensorflow以及Keras庫在R語言上進(jìn)行了手寫數(shù)字識別,代碼部分源于《Getting started with Deep Learning using Keras and TensorFlow in R》,作者: NSS:https://www.analyticsvidhya.com/blog/2017/06/getting-started-with-deep-learning-using-keras-in-r/?spm=5176.100239.blogcont109827.13.QVuLG8 。對于新手來說這些代碼可能并不好理解,前面電腦配置部分的省略讓我走過了不少坑。此篇文章中我會(huì)對后臺的安裝以及代碼部分作詳解。
環(huán)境搭建
本機(jī)電腦配置
電腦型號:MacBook Air
系統(tǒng): Windows 8.1 專業(yè)版 64位操作系統(tǒng)
處理器: Intel® Core™ i5-5250U CPU @ 1.60GHz
安裝內(nèi)存(RAM): 8.0 GB
顯卡:HD 4000核芯顯卡
安裝TensorFlow以及Keras
首先請安裝Python3.5或3.6。下載地址:https://www.python.org/getit/ 。目前最新的為3.7.1,但tensorflow win8版本目前只支持python3.5以及3.6。IOS或者LINUX可能支持2.x版本。我們用這個(gè)Python來安裝tensorflow。
本人安裝版本為Python3.6.7 64bit,安裝時(shí)顯示需要 C Runtime Update(KB2999226),即需要更新or安裝KB2999226補(bǔ)丁。如果你電腦沒有這個(gè)補(bǔ)丁的話去官網(wǎng)找到適合你計(jì)算機(jī)的版本下載更新就可以了。注意需要先安裝KB2919355才能后續(xù)安裝。
安裝時(shí)選擇把連帶的pip等都安裝上。之后在cmd里面輸入python即可查看版本。(作為電腦小白的我最開始并不知道cmd是個(gè)啥。。。其實(shí)就是ios系統(tǒng)里面的‘終端’, win系統(tǒng)里中文叫命令提示符)
C:\Users\user>python
之后需要官網(wǎng)下載 Visual C++2015 redistributable 來進(jìn)行pip install tensorflow,下載地址:https://www.microsoft.com/en-us/download/details.aspx?id=53587。
安裝完成之后cmd里輸入
C:\Users\user>pip install tensorflow
如果顯示無法訪問xxxxx就加上--user
C:\Users\user>pip install --user tensorflow
同理繼續(xù)安裝keras
C:\Users\user>pip install --user keras
現(xiàn)在一些安裝就緒,可以在cmd輸入以下代碼里查看是否安裝成,如果不顯示錯(cuò)誤那就是安裝成功了~~
C:\Users\user>python
import tensorflow
import keras
接下來進(jìn)入R語言部分!
安裝R以及Rstudio
如果之前有用過R的朋友請忽略這一段。
安裝R非常簡單,直接官網(wǎng)下載:https://mirrors.tuna.tsinghua.edu.cn/CRAN/
之后下載Rstudio,這個(gè)相當(dāng)于R語言的開掛版,界面相比于R來說非常友好,輔助功能也很多,下載地址:https://www.rstudio.com/products/rstudio/download/
#注意Rstudio是基于R語言的,需要下載安裝R語言后才可以安裝使用。
基于R語言的深度學(xué)習(xí)MLP
在Rstudio中安裝Tensorflow和Keras
此部分代碼源自:https://www.analyticsvidhya.com/blog/2017/06/getting-started-with-deep-learning-using-keras-in-r/?spm=5176.100239.blogcont109827.13.QVuLG8 。我添加了一些comments可供參考。
首先在RStudio中安裝Keras和tensorflow
install.packages("devtools") #安裝R的開發(fā)工具包 devtools::install_github("rstudio/keras") #從github下載keras到R install.packages("keras")#也可以直接下載CRAN的Keras包 #以上兩種安裝方法選其一就可以 library(keras) #加載keras包 install_tensorflow()#建立一個(gè)R語言的tensorflow環(huán)境,默認(rèn)為CPU版本 install_tensorflow(gpu=TRUE) #如果想要自定義安裝,比如使用GPU,使用這行代碼
MNIST數(shù)據(jù)集的預(yù)處理
在配置好環(huán)境后我們開始神經(jīng)網(wǎng)絡(luò)的搭建,使用dataset_mnist()數(shù)據(jù)集。MNIST數(shù)據(jù)集是60000個(gè)從0到9的十個(gè)手寫數(shù)字28x 28像素的灰度圖像組成,同時(shí)提供一個(gè)10000張圖像的測試集。
首先我們下載數(shù)據(jù)集,并為測試和訓(xùn)練數(shù)據(jù)創(chuàng)造出變量。其中x為灰度值的3D數(shù)組(圖像、寬度、高度),y為數(shù)字0到9的整數(shù)分類向量。
#把訓(xùn)練集,測試集分離并創(chuàng)造出變量 #此步驟在深度學(xué)習(xí)中非常常見,可以有效的防止數(shù)據(jù)欺詐,并且讓你的數(shù)據(jù)和步驟看起來更加清晰 train_x<-data$train$x train_y<-data$train$y test_x<-data$test$x test_y<-data$test$y rm(data) #這一步為移除原始數(shù)據(jù)。。。沒啥用
然后我們把x數(shù)據(jù)(灰度值)的3D數(shù)據(jù)中的寬度和高度通過array()轉(zhuǎn)換為一維(28x28的像素值變成長度為784的向量)使之轉(zhuǎn)化為矩陣形式。同時(shí)把0到255之間整數(shù)的灰度值轉(zhuǎn)換成0到1之間的數(shù)值。
train_x <- array(train_x, dim = c(dim(train_x)[1], prod(dim(train_x)[-1]))) / 255 test_x <- array(test_x, dim = c(dim(test_x)[1], prod(dim(test_x)[-1]))) / 255
之后再來看y數(shù)據(jù) ,我們用 Keras包里面的to_categorical()函數(shù),把之前的分類向量轉(zhuǎn)化為二進(jìn)制類矩陣(binary class matrix)
train_y<-to_categorical(train_y,10) test_y<-to_categorical(test_y,10)
深度學(xué)習(xí)MLP模型
現(xiàn)在數(shù)據(jù)已經(jīng)處理完畢了,我們可以開始建模。首先創(chuàng)建一個(gè)keras的序貫?zāi)P停╯equential model),這是一個(gè)多個(gè)網(wǎng)絡(luò)層的線性堆疊,我們可以通過向Sequential模型傳遞一個(gè)layer的list來構(gòu)造該模型。
model <- keras_model_sequential() #定義模型
添加并定義網(wǎng)絡(luò)的層
#原作者的代碼建立了一個(gè)輸入層(784個(gè)神經(jīng)元),一個(gè)全連接層(784個(gè)神經(jīng)元)以及一個(gè)輸出層(10個(gè)神經(jīng)元) model %>% #全連接層,units代表輸出緯度,input_shape代表輸入張量的shape。 layer_dense(units = 784, input_shape = 784) %>% #隨機(jī)停止40%特征檢驗(yàn),用于提高模型泛化能力。 layer_dropout(rate=0.4)%>% #選取隱層激活函數(shù)RELU layer_activation(activation = 'relu') %>% #輸出層(一共10個(gè)數(shù)字,所以輸出緯度為10) layer_dense(units = 10) %>% #選取隱層激活函數(shù)RELU layer_activation(activation = 'softmax') summary(model) # 使用summary()查看模型細(xì)節(jié)
選擇損失函數(shù)、優(yōu)化器和指標(biāo)來編譯模型
model %>% compile( loss = 'categorical_crossentropy', #損失函數(shù) optimizer = 'adam', #優(yōu)化器 metrics = c('accuracy') #指標(biāo) )
訓(xùn)練和評估模型
#使用fit()函數(shù)來訓(xùn)練模型,epochs為100,batch_size為128 model %>% fit(train_x, train_y, epochs = 100, batch_size = 128) #通過測試數(shù)據(jù)評估模型表現(xiàn) loss_and_metrics <- model %>% evaluate(test_x, test_y, batch_size = 128)
訓(xùn)練模型時(shí)上述代碼直接繪制出每一步epoch下loss和acc的值,也可以定義模型,比如mymodel<-model,之后用plot(mymodel)查看繪制過程。
之后可以通過以下代碼查看預(yù)測訓(xùn)練集的結(jié)果。
model %>% predict_classes(x_test)
我的電腦運(yùn)行時(shí)間為12s/epoch,在測試集上的loss=0.1076, acc=0.9857??梢哉f是非常不錯(cuò)的一個(gè)結(jié)果。
總結(jié)和學(xué)習(xí)筆記
我并沒有使用python去對比結(jié)果,但NSS的文章中有做對比,數(shù)據(jù)顯示R與Python相比在各方面的差別都不大。雖然這只是一個(gè)簡單的多層感知器,但是深度學(xué)習(xí)在R語言上的應(yīng)用會(huì)由此展開,雙方將再次與同一水平線上競爭。Keras與R語言的其他package的合并使用或許會(huì)為深度學(xué)習(xí)帶來一些前所未有的體驗(yàn)。
此文章中有很多不足之處,我會(huì)繼續(xù)學(xué)習(xí)并且持續(xù)更新。
歡迎一起討論~
郵箱zhaotian151@126.com
轉(zhuǎn)載請注出處
by zt
以下為一些參考資料:
快速開始序貫(Sequential)模型:https://keras-cn.readthedocs.io/en/latest/getting_started/sequential_model/
Keras各種layer的作用及用法:https://www.jianshu.com/p/86d667ee3c62
Getting started with Deep Learning using Keras and TensorFlow in R:https://www.analyticsvidhya.com/blog/2017/06/getting-started-with-deep-learning-using-keras-in-r/?spm=5176.100239.blogcont109827.13.QVuLG8
如何選擇優(yōu)化器optimizer https://www.jianshu.com/p/d99b83f4c1a6/
到此這篇關(guān)于R語言基于Keras的MLP神經(jīng)網(wǎng)絡(luò)的文章就介紹到這了,更多相關(guān)R語言Keras神經(jīng)網(wǎng)絡(luò)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
R語言數(shù)據(jù)可視化學(xué)習(xí)之圖形參數(shù)修改詳解
這篇文章主要給大家介紹了關(guān)于R語言數(shù)據(jù)可視化學(xué)習(xí)之圖形參數(shù)修改的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03R語言-生成頻數(shù)表和列聯(lián)表crosstable函數(shù)介紹
這篇文章主要介紹了R語言-生成頻數(shù)表和列聯(lián)表crosstable函數(shù)介紹,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04詳解R語言MCMC:Metropolis-Hastings采樣用于回歸的貝葉斯估計(jì)
這篇文章主要介紹了R語言MCMC:Metropolis-Hastings采樣用于回歸的貝葉斯估計(jì),本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03R語言數(shù)據(jù)框合并(merge)的幾種方式小結(jié)
這篇文章主要介紹了R語言數(shù)據(jù)框合并(merge)的幾種方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03R語言學(xué)習(xí)RcppEigen進(jìn)行矩陣運(yùn)算
這篇文章主要為大家介紹了R語言學(xué)習(xí)如何利用RcppEigen進(jìn)行矩陣運(yùn)算的實(shí)現(xiàn)方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11R語言讀取txt文件中的內(nèi)容實(shí)現(xiàn)
R語言提供了多種讀取文本數(shù)據(jù)的函數(shù),本文主要介紹了R語言讀取txt文件中的內(nèi)容實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03