R語言基於Keras的MLP神經網絡及環境搭建

Intro

R語言是我使用的第一種計算機語言,也是目前的主流數據分析語言之一,常常被人與python相比較。在EDA,制圖和機器學習方面R語言擁有很多的的package可供選擇。但深度學習方面由於缺少學習庫以及合適的框架而被python趕超。但Keras在R語言上的發佈使得兩種語言再次打成平手。

此文章使用Tensorflow以及Keras庫在R語言上進行瞭手寫數字識別,代碼部分源於《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 。對於新手來說這些代碼可能並不好理解,前面電腦配置部分的省略讓我走過瞭不少坑。此篇文章中我會對後臺的安裝以及代碼部分作詳解。

環境搭建

本機電腦配置

電腦型號:MacBook Air
系統: Windows 8.1 專業版 64位操作系統
處理器: Intel® Core™ i5-5250U CPU @ 1.60GHz
安裝內存(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版本。我們用這個Python來安裝tensorflow。

本人安裝版本為Python3.6.7 64bit,安裝時顯示需要 C Runtime Update(KB2999226),即需要更新or安裝KB2999226補丁。如果你電腦沒有這個補丁的話去官網找到適合你計算機的版本下載更新就可以瞭。註意需要先安裝KB2919355才能後續安裝。

安裝時選擇把連帶的pip等都安裝上。之後在cmd裡面輸入python即可查看版本。(作為電腦小白的我最開始並不知道cmd是個啥。。。其實就是ios系統裡面的‘終端’, win系統裡中文叫命令提示符)

C:\Users\user>python

之後需要官網下載 Visual C++2015 redistributable 來進行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

同理繼續安裝keras

C:\Users\user>pip install –user keras

現在一些安裝就緒,可以在cmd輸入以下代碼裡查看是否安裝成,如果不顯示錯誤那就是安裝成功瞭~~

C:\Users\user>python
import tensorflow
import keras

接下來進入R語言部分!

安裝R以及Rstudio

如果之前有用過R的朋友請忽略這一段。
安裝R非常簡單,直接官網下載:https://mirrors.tuna.tsinghua.edu.cn/CRAN/

之後下載Rstudio,這個相當於R語言的開掛版,界面相比於R來說非常友好,輔助功能也很多,下載地址:https://www.rstudio.com/products/rstudio/download/

#註意Rstudio是基於R語言的,需要下載安裝R語言後才可以安裝使用。

基於R語言的深度學習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的開發工具包
devtools::install_github("rstudio/keras") #從github下載keras到R
install.packages("keras")#也可以直接下載CRAN的Keras包
#以上兩種安裝方法選其一就可以
library(keras) #加載keras包
install_tensorflow()#建立一個R語言的tensorflow環境,默認為CPU版本
install_tensorflow(gpu=TRUE) #如果想要自定義安裝,比如使用GPU,使用這行代碼

MNIST數據集的預處理

在配置好環境後我們開始神經網絡的搭建,使用dataset_mnist()數據集。MNIST數據集是60000個從0到9的十個手寫數字28x 28像素的灰度圖像組成,同時提供一個10000張圖像的測試集。

首先我們下載數據集,並為測試和訓練數據創造出變量。其中x為灰度值的3D數組(圖像、寬度、高度),y為數字0到9的整數分類向量。

#把訓練集,測試集分離並創造出變量
#此步驟在深度學習中非常常見,可以有效的防止數據欺詐,並且讓你的數據和步驟看起來更加清晰
train_x<-data$train$x 
train_y<-data$train$y
test_x<-data$test$x
test_y<-data$test$y
rm(data) #這一步為移除原始數據。。。沒啥用

然後我們把x數據(灰度值)的3D數據中的寬度和高度通過array()轉換為一維(28×28的像素值變成長度為784的向量)使之轉化為矩陣形式。同時把0到255之間整數的灰度值轉換成0到1之間的數值。

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數據 ,我們用 Keras包裡面的to_categorical()函數,把之前的分類向量轉化為二進制類矩陣(binary class matrix)

train_y<-to_categorical(train_y,10)
test_y<-to_categorical(test_y,10)

深度學習MLP模型

現在數據已經處理完畢瞭,我們可以開始建模。首先創建一個keras的序貫模型(sequential model),這是一個多個網絡層的線性堆疊,我們可以通過向Sequential模型傳遞一個layer的list來構造該模型。

model <- keras_model_sequential() #定義模型

添加並定義網絡的層

#原作者的代碼建立瞭一個輸入層(784個神經元),一個全連接層(784個神經元)以及一個輸出層(10個神經元)
model %>%
  #全連接層,units代表輸出緯度,input_shape代表輸入張量的shape。
  layer_dense(units = 784, input_shape = 784) %>%
  
  #隨機停止40%特征檢驗,用於提高模型泛化能力。
  layer_dropout(rate=0.4)%>% 
  
  #選取隱層激活函數RELU
  layer_activation(activation = 'relu') %>%  
  
  #輸出層(一共10個數字,所以輸出緯度為10)
  layer_dense(units = 10) %>% 
  
  #選取隱層激活函數RELU
  layer_activation(activation = 'softmax') 
  
summary(model) # 使用summary()查看模型細節

選擇損失函數、優化器和指標來編譯模型

model %>% compile(
loss = 'categorical_crossentropy', #損失函數
optimizer = 'adam', #優化器
metrics = c('accuracy') #指標
)

訓練和評估模型

#使用fit()函數來訓練模型,epochs為100,batch_size為128
model %>% fit(train_x, train_y, epochs = 100, batch_size = 128) 
#通過測試數據評估模型表現
loss_and_metrics <- model %>% evaluate(test_x, test_y, batch_size = 128)

訓練模型時上述代碼直接繪制出每一步epoch下loss和acc的值,也可以定義模型,比如mymodel<-model,之後用plot(mymodel)查看繪制過程。

之後可以通過以下代碼查看預測訓練集的結果。

model %>% predict_classes(x_test)

我的電腦運行時間為12s/epoch,在測試集上的loss=0.1076, acc=0.9857。可以說是非常不錯的一個結果。

總結和學習筆記

我並沒有使用python去對比結果,但NSS的文章中有做對比,數據顯示R與Python相比在各方面的差別都不大。雖然這隻是一個簡單的多層感知器,但是深度學習在R語言上的應用會由此展開,雙方將再次與同一水平線上競爭。Keras與R語言的其他package的合並使用或許會為深度學習帶來一些前所未有的體驗。

此文章中有很多不足之處,我會繼續學習並且持續更新。

歡迎一起討論~

郵箱[email protected]
轉載請註出處
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

如何選擇優化器optimizer https://www.jianshu.com/p/d99b83f4c1a6/

到此這篇關於R語言基於Keras的MLP神經網絡的文章就介紹到這瞭,更多相關R語言Keras神經網絡內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: