独家 | 教你在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中构建你的第一个神经网络模型。


install.packages("devtools")

devtools::install_github("rstudio/keras")


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


library(keras)


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


install_tensorflow()


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


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手写数字进行归类


#loading keras library

library(keras)

#loading the keras inbuilt mnist dataset

data<-dataset_mnist()

#separating train and test file

train_x<-data$train$x

train_y<-data$train$y

test_x<-data$test$x

test_y<-data$test$y

rm(data)

# converting a 2D array into a 1D array for feeding into the MLP and normalising the matrix

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

#converting the target variable to once hot encoded vectors using keras inbuilt function

train_y<-to_categorical(train_y,10)

test_y<-to_categorical(test_y,10)

#defining a keras sequential model

model <- keras_model_sequential()

#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]

#i.e number of digits from 0 to 9

model %>%

layer_dense(units = 784, input_shape = 784) %>%

layer_dropout(rate=0.4)%>%

layer_activation(activation = 'relu') %>%

layer_dense(units = 10) %>%

layer_activation(activation = 'softmax')

#compiling the defined model with metric = accuracy and optimiser as adam.

model %>% compile(

loss = 'categorical_crossentropy',

optimizer = 'adam',

metrics = c('accuracy')

)

#fitting the model on the training dataset

model %>% fit(train_x, train_y, epochs = 100, batch_size = 128)

#Evaluating model on the cross validation dataset

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代码。


#importing the required libraries for the MLP model

import keras

from keras.models import Sequential

import numpy as np

 

#loading the MNIST dataset from keras

from keras.datasets import mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()

 

#reshaping the x_train, y_train, x_test and y_test to conform to MLP input and output dimensions

x_train=np.reshape(x_train,(x_train.shape[0],-1))/255

x_test=np.reshape(x_test,(x_test.shape[0],-1))/255

 

import pandas as pd

y_train=pd.get_dummies(y_train)

y_test=pd.get_dummies(y_test)

 

#performing one-hot encoding on target variables for train and test

y_train=np.array(y_train)

y_test=np.array(y_test)

 

#defining model with one input layer[784 neurons], 1 hidden layer[784 neurons] with dropout rate 0.4 and 1 output layer [10 #neurons]

model=Sequential()

 

from keras.layers import Dense

 

model.add(Dense(784, input_dim=784, activation='relu'))

keras.layers.core.Dropout(rate=0.4)

model.add(Dense(10,input_dim=784,activation='softmax'))

 

# compiling model using adam optimiser and accuracy as metric

model.compile(loss='categorical_crossentropy', optimizer="adam", metrics=['accuracy'])

# fitting model and performing validation

 

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构建有关现实生活的深度学习模型。就像有句话说的一样,竞争永不停歇。


原文发布时间为:2017-08-03 

本文作者:NSS

本文来自云栖社区合作伙伴“数据派THU”,了解相关信息可以关注“数据派THU”微信公众号

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习的奥秘:探索神经网络的构建与应用
【8月更文挑战第27天】本文将深入浅出地探讨深度学习,特别是神经网络的构建和实际应用。我们将通过一个实际案例,了解如何从零开始搭建一个深度学习模型,并利用它解决实际问题。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开深度学习的大门,让你领略其无限可能。
|
9天前
|
持续交付 测试技术 jenkins
JSF 邂逅持续集成,紧跟技术热点潮流,开启高效开发之旅,引发开发者强烈情感共鸣
【8月更文挑战第31天】在快速发展的软件开发领域,JavaServer Faces(JSF)这一强大的Java Web应用框架与持续集成(CI)结合,可显著提升开发效率及软件质量。持续集成通过频繁的代码集成及自动化构建测试,实现快速反馈、高质量代码、加强团队协作及简化部署流程。以Jenkins为例,配合Maven或Gradle,可轻松搭建JSF项目的CI环境,通过JUnit和Selenium编写自动化测试,确保每次构建的稳定性和正确性。
29 0
|
9天前
|
测试技术 数据库
探索JSF单元测试秘籍!如何让您的应用更稳固、更高效?揭秘成功背后的测试之道!
【8月更文挑战第31天】在 JavaServer Faces(JSF)应用开发中,确保代码质量和可维护性至关重要。本文详细介绍了如何通过单元测试实现这一目标。首先,阐述了单元测试的重要性及其对应用稳定性的影响;其次,提出了提高 JSF 应用可测试性的设计建议,如避免直接访问外部资源和使用依赖注入;最后,通过一个具体的 `UserBean` 示例,展示了如何利用 JUnit 和 Mockito 框架编写有效的单元测试。通过这些方法,不仅能够确保代码质量,还能提高开发效率和降低维护成本。
21 0
|
9天前
|
UED 开发者
哇塞!Uno Platform 数据绑定超全技巧大揭秘!从基础绑定到高级转换,优化性能让你的开发如虎添翼
【8月更文挑战第31天】在开发过程中,数据绑定是连接数据模型与用户界面的关键环节,可实现数据自动更新。Uno Platform 提供了简洁高效的数据绑定方式,使属性变化时 UI 自动同步更新。通过示例展示了基本绑定方法及使用 `Converter` 转换数据的高级技巧,如将年龄转换为格式化字符串。此外,还可利用 `BindingMode.OneTime` 提升性能。掌握这些技巧能显著提高开发效率并优化用户体验。
28 0
|
9天前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习入门:使用Python和TensorFlow构建你的第一个神经网络
【8月更文挑战第31天】 本文是一篇面向初学者的深度学习指南,旨在通过简洁明了的语言引导读者了解并实现他们的第一个神经网络。我们将一起探索深度学习的基本概念,并逐步构建一个能够识别手写数字的简单模型。文章将展示如何使用Python语言和TensorFlow框架来训练我们的网络,并通过直观的例子使抽象的概念具体化。无论你是编程新手还是深度学习领域的新兵,这篇文章都将成为你探索这个激动人心领域的垫脚石。
|
11天前
|
机器学习/深度学习 分布式计算 PyTorch
构建可扩展的深度学习系统:PyTorch 与分布式计算
【8月更文第29天】随着数据量和模型复杂度的增加,单个GPU或CPU已无法满足大规模深度学习模型的训练需求。分布式计算提供了一种解决方案,能够有效地利用多台机器上的多个GPU进行并行训练,显著加快训练速度。本文将探讨如何使用PyTorch框架实现深度学习模型的分布式训练,并通过一个具体的示例展示整个过程。
26 0
|
11天前
|
机器学习/深度学习 PyTorch 测试技术
深度学习入门:使用 PyTorch 构建和训练你的第一个神经网络
【8月更文第29天】深度学习是机器学习的一个分支,它利用多层非线性处理单元(即神经网络)来解决复杂的模式识别问题。PyTorch 是一个强大的深度学习框架,它提供了灵活的 API 和动态计算图,非常适合初学者和研究者使用。
25 0
|
12天前
|
机器学习/深度学习 自然语言处理 TensorFlow
深度学习的奥秘:探索神经网络的构建与训练
【8月更文挑战第28天】本文旨在揭开深度学习的神秘面纱,通过浅显易懂的语言和直观的代码示例,引导读者理解并实践神经网络的构建与训练。我们将从基础概念出发,逐步深入到模型的实际应用,让初学者也能轻松掌握深度学习的核心技能。
|
3月前
|
机器学习/深度学习 TensorFlow API
TensorFlow与Keras实战:构建深度学习模型
本文探讨了TensorFlow和其高级API Keras在深度学习中的应用。TensorFlow是Google开发的高性能开源框架,支持分布式计算,而Keras以其用户友好和模块化设计简化了神经网络构建。通过一个手写数字识别的实战案例,展示了如何使用Keras加载MNIST数据集、构建CNN模型、训练及评估模型,并进行预测。案例详述了数据预处理、模型构建、训练过程和预测新图像的步骤,为读者提供TensorFlow和Keras的基础实践指导。
240 59
|
3月前
|
机器学习/深度学习 人工智能 算法
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
海洋生物识别系统。以Python作为主要编程语言,通过TensorFlow搭建ResNet50卷积神经网络算法,通过对22种常见的海洋生物('蛤蜊', '珊瑚', '螃蟹', '海豚', '鳗鱼', '水母', '龙虾', '海蛞蝓', '章鱼', '水獭', '企鹅', '河豚', '魔鬼鱼', '海胆', '海马', '海豹', '鲨鱼', '虾', '鱿鱼', '海星', '海龟', '鲸鱼')数据集进行训练,得到一个识别精度较高的模型文件,然后使用Django开发一个Web网页平台操作界面,实现用户上传一张海洋生物图片识别其名称。
155 7
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow