網站首頁 編程語言 正文
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
相關推薦
- 2022-06-25 Docker核心組件之聯合文件系統詳解_docker
- 2022-09-24 一文詳解Golang協程調度器scheduler_Golang
- 2023-02-03 Linux設置每晚定時備份Oracle數據表的操作命令_linux shell
- 2022-11-20 Python檢測PE所啟用保護方式詳解_python
- 2022-08-31 python中ndarray數組的索引和切片的使用_python
- 2023-09-17 ES常見錯誤總結
- 2022-04-07 C#實現單例模式的多種方式_C#教程
- 2022-07-16 RabbitMQ 中 Connection 和 Channel 詳解
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支