独家 | 教你在R中使用Keras和TensorFlow构建深度学习模型

作者: NSS 2017-07-24 13:37:42

独家 | 教你在R中使用Keras和TensorFlow构建深度学习模型

引言:

在R和Python之间如何进行选择一直是一个热议的话题。机器学习世界也被不同语言偏好所划分。但是随着深度学习的盛行,天平逐渐向Python倾斜,因为截至目前为止Python具有大量R所没有的深度学习的资源库和框架。

我个人从R转到Python是因为我想更加深入机器学习的领域,而仅仅使用R的话,这(在之前)是几乎不可能实现的事情。不过也仅此而已!

随着Keras在R中的实现,语言选择的斗争又重新回到舞台中央。Python几乎已经慢慢变成深度学习建模的默认语言,但是随着在R中以TensorFlow(CPU和GPU均兼容)为后端的Keras框架的发行, 即便是在深度学习领域,R与Python抢占舞台的战争也再一次打响。

下面我们将会看到怎样在R中安装以TensorFlow为基础的Keras框架,然后在RStudio中构建我们基于经典MNIST数据集的第一个神经网络模型。

内容列表:

  • 以TensorFlow为后端的Keras框架安装
  • 在R中可以使用Keras来构建模型的不同类型
  • 在R中使用MLP将MNIST手写数字进行归类
  • 将MNIST结果与Python中同等代码结果进行比较
  • 结语

一、以TensorFlow为后端的Keras框架安装

在RStudio中安装Keras的步骤非常简单。只要跟着以下步骤,你就可以在R中构建你的第一个神经网络模型。

  1. install.packages("devtools"
  2.  
  3. devtools::install_github("rstudio/keras" 

以上步骤会从Github资源库下载Keras。现在是时候把keras加载进R,然后安装TensorFlow。

  1. library(keras) 

在默认情况下,RStudio会加载CPU版本的TensorFlow。如果没有成功加载CPU版本的TensorFlow, 使用以下指令来下载。

  1. install_tensorflow() 

如要为单独用户或桌面系统安装GPU支持的TensorFlow,使用以下指令。

  1. install_tensorflow(gpu=TRUE

为多重用户安装,请参考这个指南:https://tensorflow.rstudio.com/installation_gpu.html。

现在在我们的RStudio里,keras和TensorFlow都安装完毕了。让我们开始构建第一个在R中的神经网络来处理MNIST数据集吧。

二、在R中可以使用keras来构建模型的不同类型

以下是可以在R中使用Keras构建的模型列表

  1. 多层感知器(Multi-Layer Perceptrons)
  2. 卷积神经网络(Convoluted Neural Networks)
  3. 递归神经网络(Recurrent Neural Networks)
  4. Skip-Gram模型
  5. 使用预训练的模型(比如VGG16、RESNET等)
  6. 微调预训练的模型

让我们从构建仅有一个隐藏层的简单MLP模型开始,来试着对手写数字进行归类。

三、在R中使用MLP将MNIST手写数字进行归类

  1. #loading keras library 
  2.  
  3. library(keras) 
  4.  
  5. #loading the keras inbuilt mnist dataset 
  6.  
  7. data<-dataset_mnist() 
  8.  
  9. #separating train and test file 
  10.  
  11. train_x<-data$train$x 
  12.  
  13. train_y<-data$train$y 
  14.  
  15. test_x<-data$test$x 
  16.  
  17. test_y<-data$test$y 
  18.  
  19. rm(data) 
  20.  
  21. # converting a 2D array into a 1D array for feeding into the MLP and normalising the matrix 
  22.  
  23. train_x <- array(train_x, dim = c(dim(train_x)[1], prod(dim(train_x)[-1]))) / 255 
  24.  
  25. test_x <- array(test_x, dim = c(dim(test_x)[1], prod(dim(test_x)[-1]))) / 255 
  26.  
  27. #converting the target variable to once hot encoded vectors using keras inbuilt function 
  28.  
  29. train_y<-to_categorical(train_y,10) 
  30.  
  31. test_y<-to_categorical(test_y,10) 
  32.  
  33. #defining a keras sequential model 
  34.  
  35. model <- keras_model_sequential() 
  36.  
  37. #defining the model with 1 input layer[784 neurons], 1 hidden layer[784 neurons] with dropout rate 0.4 and 1 output layer[10 neurons] 
  38.  
  39. #i.e number of digits from 0 to 9 
  40.  
  41. model %>% 
  42.  
  43. layer_dense(units = 784, input_shape = 784) %>% 
  44.  
  45. layer_dropout(rate=0.4)%>% 
  46.  
  47. layer_activation(activation = 'relu') %>% 
  48.  
  49. layer_dense(units = 10) %>% 
  50.  
  51. layer_activation(activation = 'softmax'
  52.  
  53. #compiling the defined model with metric = accuracy and optimiser as adam. 
  54.  
  55. model %>% compile( 
  56.  
  57. loss = 'categorical_crossentropy'
  58.  
  59. optimizer = 'adam'
  60.  
  61. metrics = c('accuracy'
  62.  
  63.  
  64. #fitting the model on the training dataset 
  65.  
  66. model %>% fit(train_x, train_y, epochs = 100, batch_size = 128) 
  67.  
  68. #Evaluating model on the cross validation dataset 
  69.  
  70. loss_and_metrics <- model %>% evaluate(test_x, test_y, batch_size = 128)  

以上的代码获得了99.14%的训练精度和96.89%的验证精度。在我的i5处理器上跑这段代码完整训练一次用时13.5秒,而在TITANx GPU上,验证精度可以达到98.44%,训练一次平均用时2秒。

四、使用keras来构建MLP模型——R Vs. Python

为了更好地比较,我同样使用Python来实现解决以上的MINIST归类问题。结果不应当有任何差别,因为R会创建一个进程(conda instance)并在其中运行keras。但你仍然可以尝试以下同等的Python代码。

  1. #importing the required libraries for the MLP model 
  2.  
  3. import keras 
  4.  
  5. from keras.models import Sequential 
  6.  
  7. import numpy as np 
  8.  
  9. #loading the MNIST dataset from keras 
  10.  
  11. from keras.datasets import mnist 
  12.  
  13. (x_train, y_train), (x_test, y_test) = mnist.load_data() 
  14.  
  15. #reshaping the x_train, y_train, x_test and y_test to conform to MLP input and output dimensions 
  16.  
  17. x_train=np.reshape(x_train,(x_train.shape[0],-1))/255 
  18.  
  19. x_test=np.reshape(x_test,(x_test.shape[0],-1))/255 
  20.  
  21. import pandas as pd 
  22.  
  23. y_train=pd.get_dummies(y_train) 
  24.  
  25. y_test=pd.get_dummies(y_test) 
  26.  
  27. #performing one-hot encoding on target variables for train and test 
  28.  
  29. y_train=np.array(y_train) 
  30.  
  31. y_test=np.array(y_test) 
  32.  
  33. #defining model with one input layer[784 neurons], 1 hidden layer[784 neurons] with dropout rate 0.4 and 1 output layer [10 #neurons] 
  34.  
  35. model=Sequential() 
  36.  
  37. from keras.layers import Dense 
  38.  
  39. model.add(Dense(784, input_dim=784, activation='relu')) 
  40.  
  41. keras.layers.core.Dropout(rate=0.4) 
  42.  
  43. model.add(Dense(10,input_dim=784,activation='softmax')) 
  44.  
  45. # compiling model using adam optimiser and accuracy as metric 
  46.  
  47. model.compile(loss='categorical_crossentropy', optimizer="adam", metrics=['accuracy']) 
  48.  
  49. # fitting model and performing validation 
  50.  
  51. model.fit(x_train,y_train,epochs=50,batch_size=128,validation_data=(x_test,y_test))  

以上模型在同样的GPU上达到了98.42%的验证精度。所以,就像我们在一开始猜测的那样,结果是相同的。

五、结语

如果这是你用R构建的第一个深度学习模型,我希望你很享受这个过程。使用很简单的代码,你就可以对手写数值进行精确度达到98%的分类。这应该可以给你足够的动力让你在机器学习的领域探索。

如果你已经在Python中使用过keras深度学习框架,那么你会发现R中keras框架的句式和结构跟其在Python中非常相似。事实上,R中的keras安装包创造了一个conda环境而且安装了在该环境下运行keras所需要的所有东西。但是,更让我兴奋的是:看到现在数据科学家们使用R构建有关现实生活的深度学习模型。就像有句话说的一样,竞争永不停歇。

深度学习 Keras TensorFlow
上一篇:在人工智能和大数据产品的开发中,有哪些需要特别注意的点? 下一篇:可怕,40行代码的人脸识别实践
评论
取消
暂无评论,快去成为第一个评论的人吧

更多资讯推荐

2019机器学习框架之争:与Tensorflow竞争白热化,进击的PyTorch赢在哪里?

2019年,机器学习框架之争进入了新阶段:PyTorch与TensorFlow成为最后两大玩家,PyTorch占据学术界领军地位,TensorFlow在工业界力量依然强大,两个框架都在向对方借鉴,但是都不太理想。

大数据文摘 ·  3天前
18个挑战项目带你快速入门深度学习

AlphaGo 大战李世?h之后,深度学习技术便在国内变得异常火。吸引了大批的技术人员争相学习,那么到底如何才能更快速的入门深度学习呢?下面给大家介绍的 18 个挑战项目,通过实践动手带你快速入门深度学习!

实验楼 ·  4天前
盘点 | 8个你可能不知道的深度学习应用案例

深度学习与传统机器学习系统的不同之处在于,它能够在分析大型数据集时进行自我学习和改进,因此能应用在许多不同的领域。

天极网 ·  4天前
2019年较热门的5大深度学习课程

今天,我们将和大家盘点一下,当下较流行的深度学习资源/课程,可以帮助你们提升深度学习技能。

猿哥 ·  2019-09-26 05:16:24
DeepMind一次性开源3个新框架!深度强化学习应用落地即将迎来春天?

深度强化学习(Deep Reinforcement Learning,DRL)一直是近年来人工智能的一些重大突破的核心。然而,尽管 DRL 有了很大的进步,但由于缺乏工具和库,DRL 方法在主流解决方案中仍然难以应用。

杨鲤萍 ·  2019-09-20 09:38:18
一步一步带你完成深度学习与对象检测之人脸识别

要进行人脸识别,就要搜集用户的人脸图片,我们从网站上搜集了几个明星的照片来进行本期文章的分享。此部分文章是人脸识别的第一部分,人脸数据的搜集与提取,后期我们分享人脸识别系统的神经网络训练与人脸识别。

人工智能研究所 ·  2019-09-18 07:20:34
看懂这十步,8岁的小朋友都能理解深度学习

如果对当今人工智能的主流技术——深度学习没有了解,可能真的会有人觉得,当前的科学家们在创造无所不能、无所不知的电影AI形象。那么,如何用最浅显的方式,给大众解释什么是深度学习呢?快来看看吧!

佚名 ·  2019-09-17 16:56:39
PyTorch版《动手学深度学习》开源了,最美DL书遇上超赞DL框架

李沐等人的开源中文书《动手学深度学习》现在有 PyTorch 版实现了。不论是原书中的示例代码,还是实战项目,原来的 MXNet 都可以无缝转化到 PyTorch 代码。

ShusenTang ·  2019-09-17 10:23:45
Copyright©2005-2019 51CTO.COM 版权所有 未经许可 请勿转载