目录
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。可以说是非常不错的一个结果。
总结和学习笔记
我并没有使用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/