深度学习实战手册 R语言版

978-7-115-52425-6
作者: [印度]普拉卡什(Prakash)阿丘图尼·斯里·克里希纳·拉奥(Achyutuni Sri Krishna Rao)
译者: 王洋洋
编辑: 王峰松

图书目录:

详情

本书介绍使用 R 语言和深度学习库 TensorFlow、H2O 和 MXNet 构建不同的深度学习模型的方法和原理。本书共 10 章,其中第 1、2 章介绍如何在 R 中配置不同的深度学习库以及如何构建神经网络;第 3 ~ 7 章介绍卷积神经网络、自动编码器、生成模型、循环神经网络和强化学习的构建方法和原理;第 8、9 章介绍深度学习在文本挖掘以及信号处理中的应用;第 10 章介绍迁移学习以及如何利用 GPU 部署深度学习模型。 本书的结构简单明了,每部分由准备环节、动手操作和工作原理组成,可强化读者的学习;内容上覆盖了深度学习领域常见的神经网络类型,并介绍了使用场景。同时,书中包含大量实用的示例代码,方便读者应用到实际项目中。 本书适合有一定 R 语言编程基础,并且希望使用 R 语言快速开展深度学习项目的软件工程师或高校师生、科研人员阅读。

图书摘要

版权信息

书名:深度学习实战手册(R语言版)

ISBN:978-7-115-52425-6

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

著    [印] 普拉卡什(Prakash)

     [印] 阿丘图尼•斯里•克里希纳•拉奥

     (Achyutuni Sri Krishna Rao)

译    王洋洋

责任编辑 王峰松

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315


Copyright © 2017 Packt Publishing. First published in the English language under the title R Deep Learning Cookbook, ISBN 978-1-78712-108-9. All rights reserved.

本书中文简体字版由Packt Publishing公司授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。

版权所有,侵权必究。


本书介绍使用R语言和深度学习库TensorFlow、H2O和MXNet构建不同的深度学习模型的方法和原理。本书共10章,其中第1、2章介绍如何在R中配置不同的深度学习库以及如何构建神经网络;第3~7章介绍卷积神经网络、自动编码器、生成模型、循环神经网络和强化学习的构建方法和原理;第8、9章介绍深度学习在文本挖掘以及信号处理中的应用;第10章介绍迁移学习以及如何利用GPU部署深度学习模型。

本书的结构简单明了,每部分由准备环节、动手操作和工作原理组成,可强化读者的学习;内容上覆盖了深度学习领域常见的神经网络类型,并介绍了使用场景。同时,书中包含大量实用的示例代码,方便读者应用到实际项目中。

本书适合有一定R语言编程基础,并且希望使用R语言快速开展深度学习项目的软件工程师或高校师生、科研人员阅读。


深度学习是机器学习中经常讨论的领域,因为它能够模拟复杂函数的能力,并能够通过各种数据源和数据结构进行学习,如横截面数据、序列数据、图像、文本、音频和视频。R是数据科学界流行的语言。随着深度学习的发展,R与深度学习的关系正在逐步深化。本书旨在提供各种深度学习模型的速成课程(R语言实现),通过结构化、非结构化、图像和音频等具体案例的研究来演示深度学习的不同应用。另外,本书还将探讨迁移学习,以及如何利用GPU来提高深度学习模型的计算效率。

第1章,入门。本章介绍可用于构建深度学习模型的包,比如TensorFlow、MXNet和H2O,以及如何安装配置它们以供本书后续使用。

第2章,R深度学习。本章介绍神经网络和深度学习的基础知识,涵盖使用R中的多个工具箱构建神经网络模型的多种方法。

第3章,卷积神经网络。本章通过在图像处理和图像分类中的应用,介绍卷积神经网络的方法。

第4章,使用自动编码器的数据表示。本章使用多种方法构建自动编码器,涵盖数据压缩和降噪的应用。

第5章,深度学习中的生成模型。本章将自动编码的概念扩展为生成模型,并且涵盖诸如玻尔兹曼机(Boltzman Machine)、受限玻尔兹曼机(Restricted Boltzman Machine,RBM)和深度信念网络的方法。

第6章,循环神经网络。本章使用多个循环神经网络序列数据构建机器学习模型。

第7章,强化学习。本章为使用马尔可夫决策过程(Markov Decision Process,MDP)构建强化学习提供了基础,还涵盖基于模型的学习和无模型学习。

第8章,深度学习在文本挖掘中的应用。本章提供一个深度学习在文本挖掘领域的端到端实现。

第9章,深度学习在信号处理中的应用。本章涵盖深度学习在信号处理领域中一个详细的案例研究。

第10章,迁移学习。本章涵盖使用预训练模型的方法,比如VGG16和Inception,并且解释如何利用GPU部署深度学习模型。

要想在数据科学领域有所建树,需要持续拥有好奇心、毅力和激情。深度学习的应用范围相当广泛,为了高效地利用本书,需要读者具备以下背景知识:

学完本书,最终读者将能够理解和领会深度学习的算法,并知道如何解决多个领域中的复杂问题。

这本书面向数据科学的专业人士或分析师,他们已经执行过机器学习的任务,想进一步探索深度学习,并且需要有一个快速的参考来解决深度学习实践所遇到的痛点问题。希望在深度学习方面获得竞争优势的读者会发现这本书很有用。

专业术语或正文中出现的重要的词以粗体显示。其他格式,比如警告文字和提示文字的符号如下所示。

  显示警告或重要注释。

 

  显示提示和技巧。


Prakash博士是一位数据科学家和作家。在过去的12年中,他一直在开发数据科学解决方案,帮助医疗保健、制药、制造和电子商务等领域的知名企业解决问题。他目前在ZS咨询公司担任数据科学经理。ZS是全球最大的企业服务公司之一,其目标是通过数据分析帮助客户创建数据驱动战略,提升客户在销售和市场运营上的竞争力,从而使客户取得商业上的成功。

Prakash获得了美国威斯康星大学麦迪逊分校的工业和系统工程博士学位,他的第2个工程博士学位是在英国华威大学获得的;他之前还获得了美国威斯康星大学麦迪逊分校的硕士学位、印度国家铸造和锻造技术研究所(NIFFT)的学士学位。基于他在英国就读博士学位期间的工作,他还是Warwick Analytics公司的联合创始人。

Prakash在IEEE-Trans、EJOR和IJPR等多个刊物上发表了多篇文章,涉及运筹学和管理、软计算工具和高级算法等多个研究领域。他还编辑了一期《复杂系统的智能方法》的期刊,并对Wiley出版的Evolutionary Computing in Advanced Manufacturing以及Packt出版的Algorithms and Data Structures Using R两本书的内容做出了贡献。

如果没有我妻子Ritika Singh博士和我女儿Nishidha Singh的支持与爱,这本书就不可能完成。另外,我想特别感谢Packt团队中的许多人,他们的名字可能没有全部被提及,但我由衷地赞赏和感激他们。特别感谢编辑Aman Singh,若没有与他早期的讨论和他给出的意见,这本书就不会产生。另外,我要感谢Tejas Limkar编辑,是他不断推动我们并使这本书准时交付。我还要感谢本书所有的审稿人,他们的反馈帮助我们改进了这本书。

Achyutuni Sri Krishna Rao是数据科学家、土木工程师和作家。他在ZS咨询公司担任数据科学顾问。在过去的4年中,他一直在开发数据科学解决方案,以解决医疗保健、制药和制造企业的问题。

Sri Krishna获得了新加坡国立大学企业商业分析和机器学习的硕士学位、印度Warangal国家技术研究所的学士学位。

Sri Krishna在土木工程研究领域发表了多篇文章,并参与了Packt出版的名为Algorithms and Data Structures Using R一书的写作。

本书的写作之旅令人相当难忘,我想归功于我亲爱的妻子和我的宝贝,还要感谢我亲爱的父母和我可爱的妹妹。此外,非常感谢整个Packt团队的支持,特别感谢编辑Aman Singh和Tejas Limkar为图书的按时交付所付出的努力。我还要感谢所有的审稿者,他们的反馈帮助我们改进了这本书。


王洋洋,计算机硕士,狂热的数据爱好者,现为云网络安全领域大数据工程师,熟悉多种编程语言、大数据技术、机器学习算法和设计模式等,对自然语言处理也颇感兴趣,曾翻译《R图形化数据分析》一书。


Vahid Mirjalili是一名软件工程师和数据科学家,目前在密歇根州立大学攻读计算机科学博士学位。他在i-PRoBE的研究涉及大数据集人脸图像的属性分类。他还教授Python编程以及数据分析和数据库的课程。他在数据挖掘方面颇具专长,对预测建模和从数据中获得洞察力非常感兴趣。他也是一名Python开发人员,喜欢为开源社区贡献力量。


冯健,毕业于美国伊利诺伊大学香槟分校(UIUC),获得计算机科学与数学学位,成绩优异,曾获院长嘉许。留美期间供职于知名科技企业,目前从事以大数据和预测为主的人工智能相关技术的研究与开发工作。微信号:ericstar303。


本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。

本书提供如下资源:

要获得以上配套资源,请在异步社区本书页面中单击,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,单击“提交勘误”,输入勘误信息,单击“提交”按钮即可,如右图所示。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/selfpublish/submission即可)。

如果您是学校、培训机构或企业用户,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。

“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、人工智能、软件测试、前端、网络技术等。

异步社区

微信服务号


本章中,我们将介绍如下主题:

本章将带你入门深度学习,帮助你搭建系统,以开发深度学习模型。本章更侧重于让读者了解本书的内容以及通读本书所需的先决条件。本书适用于想快速建立深度学习应用背景的学生或专业人士。本书强调实用,以应用为中心,使用R作为构建深度学习模型的工具。

 有关深度学习的详细理论,请参阅Goodfellow等人2016年撰写的《深度学习》一书。有关机器学习的背景知识,请参阅S. Raschka于2015年撰写的《Python机器学习》一书。

我们将使用R编程语言来演示深度学习应用。贯穿本书,期望你有以下预备知识:

在开始之前,让我们给R安装一个IDE环境。对于R,比较受欢迎的IDE环境是Rstudio和Jupyter。Rstudio一直致力于R语言的应用,而Jupyter提供多语言的支持,其中包括R语言。Jupyter也提供交互式的环境,并允许你将代码、文本和图形组合到一个笔记本中。

R支持多种操作系统,比如Windows、macOS和Linux。从综合R归档网络(Comprehensive R Archive Network,CRAN)的任意镜像网站,我们可以下载R安装文件。CRAN也是R中包的主要仓库。R编程语言在32位和64位架构下均可用。

1.强烈建议使用R基础开发包(r-base-dev),因为它有很多内置的功能。它也支持install.packages()命令。该命令可使用R控制台编译并安装来自CRAN的R包。默认的R控制台如图1-1所示。

图1-1

2.为了便于编程,推荐使用集成开发环境(IDE),因为它有助于提高生产力。用于R的比较流行的开源IDE是Rstudio。Rstudio还为你提供一个Rstudio服务器,有助于基于Web的环境进行R编程。Rstudio集成开发环境界面如图1-2所示。

图1-2

目前比较著名的编辑器还有Jupyter Notebook。该应用能生成笔记本(notebook)文件,可将文档、代码和分析结合在一起。Jupyter Notebook支持很多计算内核,其中包括R。同时,它也是一个服务器、客户端、可通过浏览器访问的基于网页的应用。

通过以下步骤可以安装Jupyter Notebook。

1.可以使用pip安装Jupyter Notebook:

pip3 install --upgrade pip
pip3 install jupyter

2.如果你已经安装了Anaconda,那么安装的默认的计算内核是Python。要在同一个环境中的Jupyter中安装一个R计算内核,请在终端中键入输下命令:

conda install -c r r-essentials

3.为了在conda内名为new-env的新环境中安装R的计算内核,请输入如下命令:

conda create -n new-env -c r r-essentials

4.另一种在Jupyter Notebook中包含R计算内核的方法是使用IRkernel包。要通过此过程安装,请启动R集成开发环境。第一步是安装IRkernel所需的依赖项:

chooseCRANmirror(ind=55) # 选择安装镜像
install.packages(c('repr', 'IRdisplay', 'crayon', 'pbdZMQ',
'devtools'), dependencies=TRUE)

5.从CRAN安装所有的依赖项后,就可以从GitHub安装IRkernel软件包了。

library(devtools)
library(methods)
options(repos=c(CRAN='https://cran.rstudio.com'))
devtools::install_github('IRkernel/IRkernel')

6.一旦满足所有的要求,使用如下脚本,就可在Jupyter Notebook中安装R计算内核:

library(IRkernel)
IRkernel::installspec(name = 'ir32', displayname = 'R 3.2')

7.可以通过打开Shell或者终端启动Jupyter Notebook。执行以下命令在浏览器中打开Jupyter Notebook界面,如图1-3所示。

jupyter notebook

图1-3

与本书使用的大多数软件包一样,大多数操作系统支持R。另外,你还可以使用Docker或VirtualBox来配置一个和本书中使用相似的工作环境。

关于Docker的安装和配置信息,请参考Docker官方网站并选择适合你的操作系统的Docker镜像。同样,你也可以在VirtualBox官方网站下载VirtualBox的二进制文件。

深度学习是机器学习的分支,它是受人脑结构和功能启发的。近年来,深度学习获得了很多关注,主要是因为更高的计算能力、更大的数据集、更好的具有(人工)智能学习能力的算法,以及对数据驱动的洞察力更具好奇心。在深入了解深度学习细节之前,我们先了解机器学习的一些基本概念(这些概念构成了大多数分析解决方案的基础)。

机器学习是开发算法的一个领域,这些算法能够从数据中挖掘出自然模式,从而使用预测性的洞察力做出更好的决策。从医学诊断(使用计算生物学)到实时股票交易(使用计算金融学),从天气预报到自然语言处理,从预测性维护(在自动化和制造业中)到规定性的建议(电子商务和电子零售)等,这些洞察力在现实世界的应用领域层面都是相关的。

图1-4阐明了机器学习的两种主要技术:监督学习和无监督学习。

图1-4

监督学习:一种基于证据的学习形式。证据是给定输入的已知结果,并反过来用于训练预测模型。根据结果的数据类型,可将模型进一步分为回归和分类,前者的输出是连续的,而后者的输出是离散的。股票交易和天气预报是一些广泛应用的回归模型,而跨度检测、语音识别和图像分类是一些广泛应用的分类模型。

一些典型的回归算法有线性回归、广义线性模型(Generalized Linear Model,GLM)、支持向量回归(Support Vector Regression,SVR)、神经网络、决策树(Decision Tree)等;而分类方面的算法,则有逻辑回归、支持向量机(Support Vector Machine,SVM)、线性判别分析(Linear Discriminant Analysis,LDA)、朴素贝叶斯(Naïve Bayes)、最近邻算法(Nearest Neighbor)等。

半监督学习:一类使用无监督技术的监督学习。相对于获取和分析无标签数据的成本,标注整个数据集的成本是非常不切实际的,在该情况下,半监督学习技术是非常有用的。

无监督学习:顾名思义,就是从没有结果(或监督)的数据中学习。它是一种基于给定数据中隐藏模式和内在分组的推理学习形式,其应用包括市场模式识别、遗传聚类等。一些广泛使用的聚类算法有K均值(K-means)、分层(Hierarchical)、K中心点(K-medoids)、模糊C均值(Fuzzy C-means)、隐马尔可夫(Hidden Markov)、神经网络(Neural Network)等。

我们来看看监督学习中的线性回归。

1.我们从一个线性回归的简单例子开始。在这个例子中,我们需要确定男性身高(单位为cm)和体重(单位为kg)之间的关系。下面的样本数据代表10个随机男性的身高和体重:

data <- data.frame("height" = c(131, 154, 120, 166, 108, 115,
158, 144, 131, 112),
"weight" = c(54, 70, 47, 79, 36, 48, 65, 63, 54, 40))

2.现在,生成一个线性回归模型。

lm_model <- lm(weight ~ height, data)

3.图1-5显示了男性的身高和体重与拟合线之间的关系。

plot(data, col = "red", main = "Relationship between height and 
weight",cex = 1.7, pch = 1, xlab = "Height in cms", ylab = "Weight in kgs")
abline(lm(weight ~ height, data))

图1-5

4.在半监督模型中,学习主要是从使用有标签数据开始,然后使用未标记数据进行扩充(一般来说数量较大)。

我们对一个广泛使用的数据集iris进行K均值聚类分析(无监督学习)。

1.该数据集由3个不同种类的鸢尾属植物(setosa、versicolor和virginica)及其不同的特征组成,如萼片长度和萼片宽度、花瓣长度和花瓣宽度:

data(iris)
head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa

2.图1-6显示鸢尾属植物间特征的变化,花瓣特征随着萼片特征显示出明显的变化。

library(ggplot2)
library(gridExtra)
plot1 <- ggplot(iris, aes(Sepal.Length, Sepal.Width, color =
Species))
  geom_point(size = 2)
  ggtitle("Variation by Sepal features")
plot2 <- ggplot(iris, aes(Petal.Length, Petal.Width, color =
  Species))
   geom_point(size = 2)
   ggtitle("Variation by Petal features")
grid.arrange(plot1, plot2, ncol=2)

图1-6

3.由于鸢尾花的花瓣特征有很好的变化,因此我们使用花瓣长度和花瓣宽度进行K均值聚类分析:

set.seed(1234567)
iris.cluster <- kmeans(iris[, c("Petal.Length","Petal.Width")],
 3, nstart = 10)
iris.cluster$cluster <- as.factor(iris.cluster$cluster)

4.以下代码片段显示了聚类和物种(鸢尾花)之间的交叉表。我们可以看到,第1组主要是setosa,第2组是versicolor,第3组是virginica:

> table(cluster=iris.cluster$cluster,species= iris$Species)
species
cluster setosa versicolor virginica
1 50 0 0
2 0 48 4
3 0 2 46
ggplot(iris, aes(Petal.Length, Petal.Width, color =
iris.cluster$cluster)) + geom_point() + ggtitle("Variation by
Clusters")

5.图1-7显示了聚类分布。

图1-7

模型评估是任何机器学习过程中的关键步骤,对于监督学习和无监督学习是不同的。在监督学习模型中,预测扮演了主要角色;然而在无监督学习模型中,聚类内的同质性和聚类间的异质性起主要作用。

对于回归模型(包括交叉验证),一些广泛使用的模型评估参数如下:

对于分类模型(包括交叉验证),一些广泛使用的模型评估参数如下:

一些广泛使用的无监督模型评估参数(聚类)如下:

偏差和方差是任何监督模型的两个关键误差分量;它们在模型调整和选择中起着至关重要的权衡作用。偏差是由于预测模型在学习结果时做出的错误假设,而方差是由于模型对训练数据集的刚性所致。换言之,较高的偏差会导致模型不合适,较高的方差会导致模型过度拟合。

在偏差中,假设是针对目标函数形式的。因此,偏差在线性回归、逻辑回归和线性判别分析等参数模型中占主导地位,因为它们的结果是输入变量的函数形式。

另外,方差显示了易受影响的模型在数据集中的变化情况。一般来说,目标函数形式控制方差。因此,方差在决策树、支持向量机和K最近邻等非参数模型中占主导地位,因为它们的结果不直接是输入变量的函数形式。换言之,非参数模型的超参数可能导致预测模型的过拟合。

为了提高效率,主要的深度学习包是用C/C++开发的,而且为了高效率地开发、扩展并执行深度学习模型,封装包是用R开发的。

许多开源的深度学习库是可用的。该领域常用的库如下:

市场上还有其他功能突出的软件包,如H2O、微软认知工具包(CNTK)、darch、Mocha和ConvNetJS。

有大量围绕这些软件包开发的封装包,以支持深度学习模型的简单开发,比如Keras、Python语言的Lasagne和MXNet都支持多种语言。

下面介绍MXNet、TensorFlow包(用C++语言和CUDA开发,在GPU中可实现高度优化的性能)以及H2O软件包的使用。H2O软件包可开发一些深度学习模型,在R中H2O包实现为REST API,而REST API连接到H2O服务器(作为Java虚拟机运行)。我们将提供这些软件包的快速安装说明。

本节将介绍如何在R中安装MXNet。

MXNet包是一个轻量级的深度学习框架,支持多种编程语言,如R、Python和Julia。从编程的角度来看,它是符号和命令式编程的结合,支持CPU和GPU。

R中基于CPU的MXNet可以使用预编译的二进制包或需要构建库的源代码进行安装。在Windows / Mac中,可以下载预编译的二进制包并直接从R控制台安装。MXNet要求R版本为3.2.0或更高版本。安装MXNet需要CRAN的drat包。drat包帮助维护R仓库,且可通过install.packages()命令安装drat包。

要在Linux(13.10或更高版本)上安装MXNet,以下是一些依赖关系:

要安装支持GPU处理器的MXNet,以下是一些依赖关系:

安装MXNet和其所有依赖的一种快速方法是使用chstone存储库中预先构建的Docker镜像。Docker镜像chstone/mxnet-gpu将使用以下工具进行安装:

1.下面的R命令使用预先构建的二进制软件包安装MXNet,非常简单。然后使用drat包从git中添加dmlc存储库,随后安装MXNet:

install.packages("drat", repos="https://cran.rstudio.com")
drat:::addRepo("dmlc")
install.packages("mxnet")

2.以下代码帮助在Ubuntu(V16.04)中安装MXNet。前两行用来安装依赖,且其他行用来安装MXNet,但要满足所有依赖关系:

sudo apt-get update
sudo apt-get install -y build-essential git libatlas-base-dev
libopencv-dev
git clone https://github.com/dmlc/mxnet.git ~/mxnet --recursive
cd ~/mxnet
cp make/config.mk 
echo "USE_BLAS=openblas" >>config.mk
make -j$(nproc)

3.如果要为GPU构建MXNet,则在make命令之前需要更新以下配置:

echo "USE_CUDA=1" >>config.mk
echo "USE_CUDA_PATH=/usr/local/cuda" >>config.mk
echo "USE_CUDNN=1" >>config.mk

 对于其他操作系统,MXNet的详细安装步骤可以在http://mxnet.io/get_started/setup.html中查找。

4.以下命令用于使用Docker安装MXNet(基于GPU)及所有依赖:

docker pull chstone/mxnet-gpu

本节介绍另一个非常受欢迎的开源机器学习软件包TensorFlow。TensorFlow在构建深度学习模型方面非常有效。

TensorFlow是Google Brain Team开发的另一个开源库,用数据流图建立数值计算模型。TensorFlow的核心是用C++开发的,其封装是用Python开发的。R中的TensorFlow软件包可以使你访问由Python模块组成的TensorFlow API来执行计算模型。TensorFlow支持基于CPU和GPU的计算。

R中的TensorFlow软件包调用Python TensorFlow API来执行,以使R正常工作。在R和Python中安装TensorFlow软件包是必要的。以下为TensorFlow的依赖:

1.一旦安装了所有指定的依赖项,就可以直接使用install_github命令从devtools安装TensorFlow:

devtools::install_github("rstudio/tensorflow")

2.在R中加载TensorFlow之前,需要将Python的路径设置为系统环境变量。这可以直接在R环境中完成,如以下命令所示:

Sys.setenv(TENSORFLOW_PYTHON="/usr/bin/python")
library(tensorflow)

如果Python语言的TensorFlow模块没有安装,那么R会出现如图1-8所示的错误。

图1-8

Python语言的TensorFlow可以使用pip安装:

pip install tensorflow # 没有GPU支持的Python 2.7版本
pip3 install tensorflow # 没有GPU支持的Python 3.x版本
pip install tensorflow-gpu # 有GPU支持的Python 2.7版本
pip3 install tensorflow-gpu # 有GPU支持的Python 3.x版本

TensorFlow遵循有向图哲学来建立计算模型,其中数学运算被表示为节点,每个节点支持多个输入和输出,而边代表节点之间的数据通信。TensorFlow中还有一些称为控制依赖的边,它们不代表数据流,可以说是提供和控制依赖相关的信息,如控制依赖的节点必须在控制依赖的目标节点开始执行之前完成处理。

关于逻辑回归评估的TensorFlow图示例如图1-9所示。

图1-9

图1-9举例说明了TensorFlow图用优化的权重评估逻辑回归:

MatMul节点对输入特征矩阵X与优化权重β进行矩阵乘法运算。然后将常量C和MatMul节点的输出相加。然后使用Sigmoid函数将相加的输出转换为最终的输出Pr (y = 1 | X )。

H2O是构建机器学习模型的另一个非常流行的开源库。它是由H2O.ai开发的,且支持多种语言,包括R和Python。H2O包是一个为分布式环境开发的多用途机器学习库,用于运行大数据算法。

要安装H2O,需要以下系统:

R中的H2O可以使用H2O软件包调用,H2O软件包具有以下依赖:

对于没有安装curl-config的机器,在R中RCurl依赖的安装将失败,需要在R之外安装curl-config。

1.从CRAN可以直接安装H2O,通过依赖参数TRUE安装所有CRAN相关的H2O依赖。该命令将安装H2O软件包所需的所有R依赖:

install.packages("h2o", dependencies = T)

2.以下命令用于在当前R环境中调用H2O软件包。在启动H2O之前,首次执行H2O软件包将自动下载JAR文件,如图1-10所示。

library(h2o)
localH2O = h2o.init()

图1-10

3.使用集群IP和端口信息可以访问H2O集群。当前的H2O集群在本地主机的端口54321上运行,如图1-11所示。

图1-11

 H2O中的模型可以使用R的浏览器或脚本交互开发。H2O建模就像创建Jupyter Notebook一样,但是你可以创建一个具有不同操作的流程,例如导入数据、拆分数据、建立模型和评估。

我们使用H2O浏览器交互式地构建一个逻辑回归。

1.创建一个新的流程,如图1-12所示。

图1-12

2.使用数据(Data)菜单导入数据集,如图1-13所示。

图1-13

3.使用解析这些文件(Parse these files)操作,可将导入H2O中的文件解析为十六进制格式(H2O的本机文件格式)。一旦将文件导入H2O环境,这就会发生,如图1-14所示。

图1-14

4.在H2O中,解析过的数据帧可以使用数据|拆分帧(Data | Split Frame)操作分解为训练数据帧和测试数据帧,如图1-15所示。

图1-15

5.从模型(Model)菜单中选择模型,并设置与模型相关的参数。从图1-16中可以看到一个广义线性模型的例子。

图1-16

6.使用评估|预测(Score | Predict)操作可以评估H2O中另一个十六进制数据帧,如图1-17所示。

图1-17

对于更复杂的涉及大量预处理的场景,可以从R中直接调用H2O。本书将更多地关注从R直接使用H2O构建模型。如果H2O安装在不同的位置而不是本地主机,那么通过定义集群运行在正确的IP和端口,可以在R中连接到该集群:

localH2O = h2o.init(ip = "localhost", port = 54321, nthreads = -1)

另一个关键参数是用于构建模型的线程数量。默认情况下,nthreads被设置为-2,意味着将使用两个核。nthreads值为-1时将利用所有可用的核。

Docker是一个容器软件的平台,被用来将多个软件或应用程序并行托管在孤立的容器中,以获得更好的计算密度。与虚拟机不同,容器只需要任何软件所需的库和配置来构建,而且不和整个操作系统捆绑,因此使其变得轻量和高效。

根据所使用的操作系统,安装所有3个软件包可能非常麻烦。下面的dockerfile代码可以用来搭建一个安装了TensorFlow,支持GPU的MXNet、H2O以及安装了所有依赖的环境:

FROM chstone/mxnet-gpu:latest
MAINTAINER PKS Prakash <prakash5801>

# 安装依赖
RUN apt-get update && apt-get install -y
 python2.7
 python-pip
 python-dev
 ipython
 ipython-notebook
 python-pip
 default-jre

# 安装pip和Jupyter Notebook
RUN pip install --upgrade pip &&
 pip install jupyter

# 将R添加到Jupyter内核
RUN Rscript -e "install.packages(c('repr', 'IRdisplay', 'crayon',
'pbdZMQ'), dependencies=TRUE, repos='https://cran.rstudio.com')" &&
 Rscript -e "library(devtools); library(methods);
options(repos=c(CRAN='https://cran.rstudio.com'));
devtools::install_github('IRkernel/IRkernel')" &&
 Rscript -e "library(IRkernel); IRkernel::installspec(name = 'ir32',
displayname = 'R 3.2')"

#安装H2O
RUN Rscript -e "install.packages('h2o', dependencies=TRUE,
repos='http://cran.rstudio.com')"

# 安装tensorflow修复代理端口
RUN pip install tensorflow-gpu
RUN Rscript -e "library(devtools);
devtools::install_github('rstudio/tensorflow')"

当前镜像是在Docker镜像chstone/mxnet-gpu上创建的。

Docker可以使用以下步骤安装所有依赖项。

1.将前面的代码保存到一个地方,假设是Dockerfile。

2.使用命令行转到文件所在位置,并执行以下命令,结果如图1-18所示。

docker run -t "TagName:FILENAME"

图1-18

3.使用docker images命令访问镜像,如图1-19所示。

图1-19

4.可以使用以下命令执行Docker镜像,结果如图1-20所示。

docker run -it -p 8888:8888 -p 54321:54321 <<IMAGE ID>>

图1-20

此处,-i选项为交互模式,-t为了分配--tty。-p选项用于转发端口。因为我们在端口8888上运行Jupyter,在54321上运行H2O,我们已经将两个端口转为从本地浏览器可访问。

更多Docker选项可以使用docker run –help查看。


相关图书

ChatGPT原理与应用开发
ChatGPT原理与应用开发
深度学习的数学——使用Python语言
深度学习的数学——使用Python语言
深度学习:从基础到实践(上、下册)
深度学习:从基础到实践(上、下册)
动手学深度学习(PyTorch版)
动手学深度学习(PyTorch版)
深度学习与医学图像处理
深度学习与医学图像处理
深度强化学习实战:用OpenAI Gym构建智能体
深度强化学习实战:用OpenAI Gym构建智能体

相关文章

相关课程