日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

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

作者:zzzt151 ? 更新時間: 2022-03-26 編程語言

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()轉換為一維(28x28的像素值變成長度為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??梢哉f是非常不錯的一個結果。

總結和學習筆記

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

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

歡迎一起討論~

郵箱zhaotian151@126.com
轉載請注出處
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/

原文鏈接:https://blog.csdn.net/zhaotian151/article/details/84305440

欄目分類
最近更新