重磅推荐
【产品特色】

【编辑推荐】

场景式学习,全面覆盖机器学习深度学习强化学习深度强化学习及模型的迁移学习,没有机器学习专业基础也能够上手设计与开发机器学习产品,内容全面,深入浅出,工具多样,案例丰富,授人以渔。

1.内容全面
全面覆盖了机器学习的三大领域:有监督学习、无监督学习、强化学习。在分析它们的传统算法模型后,着重解析近年来取得突破的深度学习在人工智能方面的应用。
2.深入浅出
用生活化的语言描述算法与模型的原理与作用,并给出实践指导和案例解析。使得没有任何专业基础的读者在学习本书后能够独立设计与开发机器学习产品。

3.工具多样
理论内容全面,以至于没有哪个工具能够全部实现这些模型,因此在每一个模型的实践部分选取*合适的工具。总体来看,本书围绕scikit-learn与TensorFlow展开实践,并在需要时引入其他工具。

4.案例丰富
除了每个模型的小型实践,本书包括的较大案例是:金融预测、医疗诊断概率模型、月球登陆器、图像识别、写诗机器人、中国象棋博弈。

5.授人以渔
在运用到较深的理论知识或更细节的论证结果时,本书给出这些知识与结论的出处,确保读者能够追本溯源;在工具使用方面,不仅着眼于接口细节,更关注那些能使读者快速形成查阅该工具*在线文档的核心知识的能力。



【内容简介】
这是一本场景式的机器学习实践书,笔者努力做到“授人以渔,而非授人以鱼”。
理论方面从人工智能(AI)与机器学习(ML)的基本要素讲起,逐步展开有监督学习、无监督学习、强化学习这三大类模型的应用场景与算法原理;实践方面通过金融预测、医疗诊断概率模型、月球登陆器、图像识别、写诗机器人、中国象棋博弈等案例启发读者将机器学习应用在各行各业里,其中后三个案例使用了深度学习技术。

本书试图用通俗的语言讲解涵盖算法模型的机器学习,主要内容包括机器学习通用概念、三个基本科学计算工具、有监督学习、聚类模型、降维模型、隐马尔可夫模型、贝叶斯网络、自然语言处理、深度学习、强化学习、模型迁移等。在深入浅出地解析模型与算法之后,介绍使用Python相关工具进行开发的方法、解析经典案例,使读者做到“能理解、能设计、能编码、能调试”,没有任何专业基础的读者在学习本书后也能够上手设计与开发机器学习产品。

本书内容深入浅出、实例典型,适合对机器学习感兴趣的产品设计、技术管理、数据分析、软件开发或学生读者。阅读本书既能了解当前工业界的主流机器学习与深度学习开发工具的使用方法,又能从战略方面掌握如何将人工智能技术应用到自己的企业与产品中

【作者简介】
刘长龙,复旦大学信息管理学士学位、上海交通大学计算机技术硕士学位,从事计算机软件研发十余年。对应用软件开发有较广泛深入了解,用C 、Python等技术主持负责过电信级实时计费系统、客户管理系统、智能家居、物联网云平台的研究和设计开发工作。在不写作的时候,业余时间喜欢跑步和游泳。畅销书《Python高效开发实战:Django、Tornado、Flask、Twisted》的作者。
【目录】

第1章 机器学习基础... 1

1.1 引言... 1

1.1.1 为什么使用机器学习.. 2

1.1.2 机器学习与数据挖掘.. 4

1.1.3 机器学习与人工智能.. 5

1.2 机器学习的一般流程... 7

1.2.1 定义问题.. 7

1.2.2 收集数据.. 8

1.2.3 比较算法与模型.. 9

1.2.4 应用模型.. 10

1.3 学习策略... 10

1.3.1 有监督学习.. 11

1.3.2 无监督学习.. 14

1.3.3 强化学习.. 16

1.3.4 综合模型与工具.. 18

1.4 评估理论... 19

1.4.1 划分数据集.. 19

1.4.2 交叉验证.. 21

1.4.3 评估指标.. 22

1.4.4 拟合不足与过度拟合.. 25

1.5 本章内容回顾... 26

第2章 Python基础工具... 27

2.1 Numpy. 28

2.1.1 Numpy与Scipy的分工.. 28

2.1.2 ndarray构造.. 29

2.1.3 数据类型.. 32

2.1.4 访问与修改.. 33

2.1.5 轴.. 35

2.1.6 维度操作.. 38

2.1.7 合并与拆分.. 40

2.1.8 增与删.. 41

2.1.9 全函数.. 42

2.1.10 广播.. 42

2.2 Matplot 43

2.2.1 点线图.. 44

2.2.2 子视图.. 50

2.2.3 图像.. 53

2.2.4 等值图.. 57

2.2.5 三维绘图.. 58

2.2.6 从官网学习.. 59

2.3 Scipy. 60

2.3.1 数学与物理常数.. 61

2.3.2 特殊函数库.. 62

2.3.3 积分.. 64

2.3.4 优化.. 65

2.3.5 插值.. 67

2.3.6 离散傅里叶.. 68

2.3.7 卷积.. 70

2.3.8 线性分析.. 71

2.3.9 概率统计.. 73

2.4 本章内容回顾... 77

第3章 有监督学习:分类与回归... 79

3.1 线性回归... 80

3.1.1 何谓线性模型.. 80

3.1.2 *小二乘法.. 81

3.1.3 *小二乘法的不足.. 82

3.1.4 岭回归.. 85

3.1.5 Lasso回归.. 87

3.2 梯度下降... 90

3.2.1 假设函数与损失函数.. 90

3.2.2 随机梯度下降.. 92

3.2.3 实战:SGDRegressor和SGDClassifier 93

3.2.4 增量学习.. 94

3.3 支持向量机... 95

3.3.1 *超平面.. 95

3.3.2 软间隔.. 97

3.3.3 线性不可分问题.. 98

3.3.4 核函数.. 99

3.3.5 实战:scikit-learn中的SVM.. 100

3.4 朴素贝叶斯分类... 101

3.4.1 基础概率.. 102

3.4.2 贝叶斯分类原理.. 103

3.4.3 高斯朴素贝叶斯.. 105

3.4.4 多项式朴素贝叶斯.. 106

3.4.5 伯努利朴素贝叶斯.. 107

3.5 高斯过程... 107

3.5.1 随机过程.. 108

3.5.2 无限维高斯分布.. 109

3.5.3 实战:gaussian_process工具包.. 111

3.6 决策树... 114

3.6.1 *易于理解的模型.. 114

3.6.2 熵的作用.. 115

3.6.3 实战:DecisionTreeClassifier与DecisionTreeRegressor 117

3.6.4 树的可视化.. 118

3.7 集成学习... 119

3.7.1 偏差与方差.. 120

3.7.2 随机森林.. 121

3.7.3 自适应增强.. 124

3.8 综合话题... 126

3.8.1 参数与非参数学习.. 127

3.8.2 One-Vs-All与One-Vs-One 127

3.8.3 评估工具.. 129

3.8.4 超参数调试.. 131

3.8.5 多路输出.. 134

3.9 本章内容回顾... 134

第4章 无监督学习:聚类... 136

4.1 动机... 137

4.2 K-means. 138

4.2.1 算法.. 139

4.2.2 实战:scikit-learn聚类调用.. 141

4.2.3 如何选择K值.. 144

4.3 近邻算法... 145

4.3.1 生活化的理解.. 145

4.3.2 有趣的迭代.. 146

4.3.3 实战:AffinityPropagation类.. 147

4.4 高斯混合模型... 149

4.4.1 中心极限定理.. 150

4.4.2 *似然估计.. 151

4.4.3 几种协方差矩阵类型.. 152

4.4.4 实战:GaussianMixture类.. 154

4.5 密度聚类... 156

4.5.1 凸数据集.. 157

4.5.2 密度算法.. 158

4.5.3 实战:DBSCAN类.. 159

4.6 BIRCH.. 160

4.6.1 层次模型综述.. 161

4.6.2 聚类特征树.. 162

4.6.3 实战:BIRCH相关调用.. 164

4.7 距离计算... 166

4.7.1 闵氏距离.. 166

4.7.2 马氏距离.. 167

4.7.3 余弦相似度.. 168

4.7.4 时间序列比较.. 169

4.7.5 杰卡德相似度.. 169

4.8 聚类评估... 170

4.9 本章内容回顾... 172

第5章 无监督学习:数据降维... 173

5.1 主成分分析... 174

5.1.1 寻找方差*维度.. 174

5.1.2 用PCA降维.. 177

5.1.3 实战:用PCA寻找主成分.. 178

5.2 线性判别分析... 181

5.2.1 双重标准.. 181

5.2.2 实战:使用LinearDiscriminantAnalysis 183

5.3 多维标度法... 185

5.3.1 保留距离信息的线性变换.. 185

5.3.2 MDS的重要变形.. 187

5.3.3 实战:使用MDS类.. 188

5.4 流形学习之Isomap. 189

5.4.1 什么是流形.. 190

5.4.2 测地线距离.. 192

5.4.3 实战:使用Isomap类.. 193

5.5 流形学习之局部嵌入... 195

5.5.1 局部线性嵌入.. 195

5.5.2 拉普拉斯特征映射(LE).. 198

5.5.3 调用介绍.. 200

5.5.4 谱聚类.. 201

5.6 流形学习之t-SNE. 203

5.6.1 用Kullback-Leiber衡量分布相似度.. 203

5.6.2 为什么是t-分布.. 205

5.6.3 实战:使用TSNE类.. 206

5.7 实战:降维模型之比较... 207

5.8 本章内容回顾... 210

第6章 隐马尔可夫模型... 212

6.1 场景建模... 213

6.1.1 两种状态链.. 213

6.1.2 两种概率.. 215

6.1.3 三种问题.. 217

6.1.4 hmmLearn介绍.. 218

6.2 离散型分布算法与应用... 222

6.2.1 前向算法与后向算法.. 222

6.2.2 MultinomialNB求估计问题.. 226

6.2.3 Viterbi算法.. 227

6.2.4 MultinomialNB求解码问题.. 229

6.2.5 EM算法.. 232

6.2.6 Baum-Welch算法.. 233

6.2.7 用hmmLearn训练数据.. 235

6.3 连续型概率分布... 236

6.3.1 多元高斯分布.. 237

6.3.2 GaussianHMM.. 239

6.3.3 GMMHMM.. 240

6.4 实战:股票预测模型... 241

6.4.1 数据模型.. 241

6.4.2 目标.. 243

6.4.3 训练模型.. 243

6.4.4 分析模型参数.. 245

6.4.5 可视化短线预测.. 247

6.5 本章内容回顾... 250

第7章 贝叶斯网络... 251

7.1 什么是贝叶斯网络... 252

7.1.1 典型贝叶斯问题.. 252

7.1.2 静态结构.. 253

7.1.3 联合/边缘/条件概率换算.. 256

7.1.4 链式法则与变量消元.. 258

7.2 网络构建... 259

7.2.1 网络参数估计.. 260

7.2.2 启发式搜索.. 261

7.2.3 Chow-Liu Tree算法.. 262

7.3 近似推理... 263

7.3.1 蒙特卡洛方法.. 264

7.3.2 马尔可夫链收敛定理.. 265

7.3.3 MCMC推理框架.. 267

7.3.4 Gibbs采样.. 268

7.3.5 变分贝叶斯.. 268

7.4 利用共轭建模... 270

7.4.1 共轭分布.. 270

7.4.2 隐含变量与显式变量.. 272

7.5 实战:胸科疾病诊断... 274

7.5.1 诊断需求.. 274

7.5.2 Python概率工具包.. 275

7.5.3 建立模型.. 276

7.5.4 MCMC采样分析.. 278

7.5.5 近似推理.. 281

7.6 本章内容回顾... 282

第8章 自然语言处理... 284

8.1 文本建模... 285

8.1.1 聊天机器人原理.. 285

8.1.2 词袋模型.. 286

8.1.3 访问新闻资源库.. 287

8.1.4 TF-IDF. 290

8.1.5 实战:关键词推举.. 290

8.2 词汇处理... 294

8.2.1 中文分词.. 294

8.2.2 Word2vec. 296

8.2.3 实战:寻找近似词.. 298

8.3 主题模型... 303

8.3.1 三层模型.. 303

8.3.2 非负矩阵分解.. 304

8.3.3 潜在语意分析.. 305

8.3.4 隐含狄利克雷分配.. 307

8.3.5 实战:使用工具包.. 309

8.4 实战:用LDA分析新闻库... 311

8.4.1 文本预处理.. 311

8.4.2 训练与显示.. 313

8.4.3 困惑度调参.. 315

8.5 本章内容回顾... 317

第9章 深度学习... 319

9.1 神经网络基础... 320

9.1.1 人工神经网络.. 320

9.1.2 神经元与激活函数.. 321

9.1.3 反向传播.. 323

9.1.4 *网络.. 325

9.2 TensorFlow核心应用... 328

9.2.1 张量.. 329

9.2.2 开发架构.. 331

9.2.3 数据管理.. 332

9.2.4 评估器.. 335

9.2.5 图与会话.. 338

9.2.6 逐代(epoch)训练.. 341

9.2.7 图与统计可视化.. 343

9.3 卷积神经网络... 349

9.3.1 给深度学习一个理由.. 349

9.3.2 CNN结构发展.. 351

9.3.3 卷积层.. 354

9.3.4 池化层.. 356

9.3.5 ReLU与Softmax. 357

9.3.6 Inception与ResNet 359

9.4 优化... 362

9.4.1 批次规范化.. 362

9.4.2 剪枝.. 364

9.4.3 算法选择.. 366

9.5 循环神经网络与递归神经网络... 367

9.5.1 循环神经网络.. 368

9.5.2 长短期记忆(LSTM).. 371

9.5.3 递归神经网络.. 374

9.6 前沿精选... 377

9.6.1 物件检测模型.. 377

9.6.2 密连卷积网络.. 381

9.6.3 胶囊网络.. 382

9.7 CNN实战:图像识别... 385

9.7.1 开源图像库CIFAR. 385

9.7.2 项目介绍.. 388

9.7.3 构建Graph. 389

9.7.4 优化与训练.. 392

9.7.5 运行.. 394

9.8 RNN实战:写诗机器人... 397

9.8.1 语言模型.. 397

9.8.2 LSTM开发步骤1:网络架构.. 401

9.8.3 LSTM开发步骤2:数据加载.. 402

9.8.4 LSTM开发步骤3:搭建TensorFlow Graph. 403

9.8.5 LSTM开发步骤4:解析LSTM RNN. 404

9.8.6 LSTM开发步骤5:LSTM中的参数.. 406

9.8.7 LSTM开发步骤6:用sequence_loss计算RNN损失值.. 406

9.8.8 LSTM开发步骤7:学习速度可调优化器.. 407

9.8.9 LSTM开发步骤8:训练.. 408

9.8.10 开始写唐诗.. 410

9.8.11 写唐诗步骤1:用唐诗语料训练语言模型.. 410

9.8.12 写唐诗步骤2:作诗.. 412

9.8.13 写唐诗步骤3:作品举例.. 414

9.9 本章内容回顾... 415

第10章 强化学习... 418

10.1 场景与原理... 419

10.1.1 借AlphaGo谈人工智能.. 419

10.1.2 基于价值的算法Q-Learning与Sarsa. 421

10.1.3 基于策略的算法.. 424

10.1.4 基于模型的算法.. 426

10.2 OpenAI Gym.. 427

10.2.1 环境调用.. 428

10.2.2 实战:用Q-Learning开发走迷宫机器人.. 432

10.3 深度强化学习... 435

10.3.1 DQN及改进.. 435

10.3.2 DPN、DDPG及A3C. 436

10.3.3 实战:用DPN训练月球定点登陆.. 439

10.4 博弈原理... 444

10.4.1 深度搜索与广度搜索.. 444

10.4.2 完美决策.. 446

10.4.3 蒙特卡洛搜索树.. 448

10.5 实战:中国象棋版AlphaGo Zero. 449

10.5.1 开源版本AlphaGo Zero. 450

10.5.2 盘面建模.. 452

10.5.3 左右互搏.. 457

10.5.4 MCTS详解.. 464

10.5.5 DDPG详解.. 468

10.5.6 运行展示:训练.. 473

10.5.7 运行展示:查看统计.. 475

10.5.8 运行展示:当头炮、把马跳.. 475

10.5.9 运行展示:人机博弈.. 476

10.6 本章内容回顾... 477

第11章 模型迁移... 478

11.1 走向移动端... 478

11.1.1 Android上的TensorFlow. 479

11.1.2 iOS上的CoreML. 480

11.2 迁移学习... 483

11.2.1 动机.. 483

11.2.2 训练流程.. 484

11.3 案例实战:基于TensorFlow Hub的迁移学习开发... 485

11.3.1 下载并训练.. 485

11.3.2 检验学习成果.. 486

11.3.3 迁移学习开发.. 487

11.4 本章内容回顾... 488

后记... 489



【前言】
随着越来越多的人工智能技术的突破、市场上实际产品的研发与销售,机器学习成为了当下所有高科技企业在管理、技术、运维等所有层面被高度关注的技术领域。在所有企业的产品设计论坛、技术研讨会中,人工智能与机器学*会成为大家关注的焦点。
但是,人工智能与机器学习所获得的关注与大家对该领域知识的了解却不成正比。以笔者自身的经历来说,在*高科技企业的技术研讨与分享会中,很多次被问到:
机器学习与深度学习的区别是什么?
什么是有监督学习?
人工智能能不能应用在我们的产品中?

这些问题既可以用一两句话回答,也可以用一本书来阐述。无论如何,笔者能肯定的一点是:大家对机器学习充满兴趣,但平时又忙于工作和生活,无暇系统地学习这方面的知识。
机器学习作为一个知识体系而言确实是庞大的,系统学习它至少要以扎实掌握数学和计算机本科6~7门课程为基础。但是这些课程已经让很多在校学生“备受折磨”,更别提终日忙于工作与家庭、已毕业多年的企业管理与工程人员了。
如何让对数学久疏战阵或者本就不擅长数学的人快速领略和掌握人工智能与机器学习的全貌呢?
本书试图用通俗的语言讲解涵盖算法模型的机器学习。更进一步地,在深入浅出解析模型与算法之后,介绍使用Python相关工具进行开发的方法、解析经典案例,使读者做到“能理解,能设计、能编码、能调试”,真正将机器学习应用在自己的产品之中。

##本书特色
1.内容全面
全面覆盖了机器学习的三大领域:有监督学习、无监督学习、强化学习。在分析它们的传统算法模型后,着重解析近年来取得突破的深度学习在人工智能方面的应用。
2.深入浅出
用生活化的语言描述算法与模型的原理与作用,并给出实践指导和案例解析。使得没有任何专业基础的读者在学习本书后能够独立设计与开发机器学习产品。
3.工具多样
理论内容全面,以至于没有哪个工具能够全部实现这些模型,因此在每一个模型的实践部分选取*合适的工具。总体来看,本书围绕scikit-learn与TensorFlow展开实践,并在需要时引入其他工具。
4.案例丰富
除了每个模型的小型实践,本书包括的较大案例是:金融预测、医疗诊断概率模型、月球登陆器、图像识别、写诗机器人、中国象棋博弈。
5.授人以渔
在运用到较深的理论知识或更细节的论证结果时,本书给出这些知识与结论的出处,确保读者能够追本溯源;在工具使用方面,不仅着眼于接口细节,更关注那些能使读者快速形成查阅该工具*在线文档的核心知识的能力。


##本书内容体系
虽然本书每章有明确的主题内容,但知识体系有轻微依赖关系,因此对于普通读者来说建议按编排顺序阅读。对于有特定需求的读者,可以按照下图寻找学习路径。
除了第2章,学习上图中任何一个模块前,都建议以其上方的章节为基础。第2章介绍的是后续其他章节里实践所依赖的Python基础工具,对于只关注模型场景与原理的读者可将其跳过。
从图中可以看到,除了基础的第1、2章,本书由3条学习线组成。
(1)第3、9、10、11章
第3章以scikit-learn为工具介绍有监督学习的传统模型;第9章是本书篇幅*的一章,以TensroFlow为工具学习近年来发展*快的深度学习模型,因为其与第8章有少量关联,所以放在了第9章;第10章学习强化学习传统算法与深度学习算法;第11章简单介绍深度学习模型的迁移方法。
(2)第4、5章
用scikit-learn讲解无监督学习模型原理、算法与应用。无监督学习中*主要的两部分是聚类与降维,在讲解过程中比较了每个模型的优势与劣势。
(3)第6、7、8章
讲解概率类机器学习模型的原理与实战。第6章作为入门使读者领略概率模型的特点;第7章全面介绍贝叶斯类算法的基本知识和简单实践;第8章的重点是LDA主题模型,以第7章的内容为基础。
只要按照图中的顺序学习,几乎不需要任何基础就可以掌握图中所有机器学习领域的基本方法,为今后在这方面进行研究与工作打下坚实的基础。


##本书读者
本书几乎适合任何对机器学习感兴趣的读者,比较典型的是:
产品设计经理。
技术管理者。
信息技术创业者。
数据分析员。
软件开发人员。
在校学生。
另外,如果您已经是机器学习领域的资深研究者,能看懂相关论文,或正准备在专业杂志上发表这方面的论文,可能这本书会不那么适合你。谨此说明。
感谢
感谢您的信任,如果阅读这本书能启发您获得新的灵感,那是我*的荣幸。同时也因为本人水平有限,书中内容有疏漏之处也请赐教和包涵。


轻松注册成为博文视点社区用户(www.broadview.com.cn),扫码直达本书页面。
下载资源:本书如提供示例代码及资源文件,均可在 下载资源 处下载。
提交勘误:您对书中内容的修改意见可在 提交勘误 处提交,若被采纳,将获赠博文视点社区积分(在您购买电子书时,积分可用来抵扣相应金额)。
交流互动:在页面下方 读者评论 处留下您的疑问或观点,与我们和其他读者一同学习交流。
页面入口:http://www.broadview.com.cn/35518

【免费在线读】

9.2 TensorFlow核心应用

谷歌于2015年开源了其诸多智能产品使用的机器学习软件库TensorFlow。相对于Python的其他机器学习库,它的主要优势在于优秀的架构设计和*活跃的开发社区,因此本书选择TensorFlow作为深度学习实践工具,该框架可以用pip3工具进行管理。

# pip3 install tensorflow # 安装

# pip3 install --upgrade tensorflow==1.9.0 # 如已安装,尝试升级

*条命令用于安装,第二条命令用于升级到本书使用的2018年7月发布的1.9.0版本。

9.2.1 张量

张量(Tensor)是在人工智能领域常被提到的一个概念,非理科出身的读者可能对这个概念比较陌生。一个常见的问题就是:什么是张量?

1.意图

张量的概念来源于物理学中需要用与坐标无关的语言描述物理现象的需要。为什么普通的数字量(标量)不能满足这个需求呢?想象有两个观众在不同位置观看跑步比赛,观察者A在跑道的侧方,而观察者B在跑道的正前方,如图9-10所示。

图9-10 位置对物理现象解读的影响

设图中跑者的速度为s,那么观察者A应该能更好地体会到该速度值,而在观察者B看来跑者的速度可能远小于s,甚至为零。这就是为什么体育场中主席台的位置是在椭圆跑道的侧方而不是正前方的原因。

显然跑者的速度与观察者的位置无关,导致观察者B产生“错觉”的原因是,他与观察者A有不同的观察坐标系。那么应该如何描述才能使A和B都能体会到该速度值呢?物理学家想到的方式就是用更多的语言描述该速度,比如“该跑者向北的速度为s1,向东的速度为s2,向上的速度为s3”,这样的语言不仅能适应不同位置的观察者,还能描述一个正在爬坡的跑者的移动方式,这样一组用于描述同一个物理现象的数值组合就被称为“张量”。

2.阶

在上面的例子中,用三维空间中不同方向的值描述了速度张量的概念,其实对其更确切的说法应该是“一阶张量”。现在假设图9-10中的跑者在跑步过程中有一股旋风吹过,如何描述它对跑者的影响呢?如果仅用风力值描述就会犯忽略坐标系的错误,由于此时有两股力驱动着跑者(自身的跑动、旋风),*好的描述该现象的语言应该如下。

◎ 在跑者向北的运动中,旋风对其产生了推力:向北p11,向东p12,向上p13。

◎ 在跑者向南的运动中,旋风对其产生了推力:向北p21,向东p22,向上p23。

◎ 在跑者向上的运动中,旋风对其产生了推力:向北p31,向东p32,向上p33。

这样用三维空间中的3×3个数值才完整描述了该事件。这也是一种张量,被称为“二阶张量”。这样的想法被不断扩展,张量被数学家定义成了一种多重线性映射,可以产生“零阶张量”“三阶张量”“四阶张量”……这其中零阶张量就是平时所说的标量,一阶张量就是向量,二阶张量就是矩阵。

注意:需要区分张量中“维度”与“阶数”的概念。具体地说,一个张量总由个数值分量构成,其中m是维度数,n是阶数。

3.TensorFlow中的张量

张量是TensorFlow中基本的数据单元,而神经网络的运算可以看成张量在不同计算结点之间的流动,这也就不难理解TensorFlow名称的由来了。

虽然张量的物理与数学背景高深,但在TensorFlow这样的工程应用中却可以通过简单的多维数组进行表达。在TensorFlow中每个张量除了其包含的数值外,还有两个重要属性。

◎ dtype:数值分量的类型,比如float32、int32、string等。

◎ shape:张量的形状。比如[]表示零阶张量,[d]表示d维空间的一阶张量,[d1, d2]表示二阶张量。

TensorFlow中允许张量各阶的维度数不同,比如在二阶张量shape=[d1, d2]中,d1和d2可以取不同的整数。

开发者主要通过四种方式定义TensorFlow中的张量:Variable、constant、placeholder、SparseTensor,代码如下。

>>> import tensorflow as tf # 引入TensorFlow开发包

# 零阶浮点数张量

>>> circle_rate = tf.Variable(3.14159265359, tf.float64)

# 一阶字符串张量

>>> hellos = tf.Variable(["Hello", “Hi”, “How are you”], tf.string)

# 二阶整数张量

>>> squares = tf.Variable([ [4, 9], [16, 25] ], tf.int32)

>>> print(hellos) # 查看张量属性

<tf.Variable 'Variable:0' shape=(3,) dtype=string_ref>

像Numpy中的ndarray、Python中的list等类似多维数组对象一样,TensorFlow中的tensor也支持slicing、reshape等常用操作。

>>> squares[1, 0] # 读取[1, 0]索引处的分量

>>> squares[:, 0] # 读取第二阶索引为0处的分量

>>> tf.reshape(hellos, [-1, 1]) # 转换hellos为新形状[-1, 1]

>>> rank_three = tf.ones([3, 4, 3]) # 初始化一个全1的三阶张量

>>> zeros = tf.zeros(rank_three.shape) # 初始化一个全零张量

>>> tf.enable_eager_execution()

>>> tf.executing_eagerly() # 开启eagerly模式

>>> tf.rank(rank_three) # 查询张量阶数

<tf.Tensor: id=11, shape=(), dtype=int32, numpy=3> # numpy=3 表示阶数为3

注意:在初学或调试时开启eagerly模式可以随时查看TensorFlow表达式的执行结果,在生产环境中开发者应该编码管理Session的执行以提高执行效率,后续会逐步介绍。

在上述代码中,-1、冒号“:”逗号“,”“shape”等符号的意义与Numpy的ndarray相同,不再赘述。

由于list、ndarray等数组形式也可以用来表达张量,在TensorFlow中它们被称为“Tensor-like objects”,在很多接口中与tf.Tensor类型的参数通用。

9.2.2 开发架构

如果仅仅用“张量流”描述TensorFlow架构对于程序员来说太过简单,官网上如图9-11所示的TensorFlow开发栈给出了一个非常好的鸟瞰视角。

图9-11 TensorFlow开发栈

对于TensorFlow使用者来说,以图9-11从上到下的顺序学习是比较好的选择。Estimators中提供了若干封装模型,在使用方式上类似于scikit-learn;中层的Layers、Datasets、Metrics接口给予开发者更多、更细致的模型控制能力;底层的其他接口包括各种数学封装、硬件利用、分布式执行等接口。除了原生的Python接口,TensorFlow在低层接口还支撑C 、Java、Go等其他语言。由于本书主题是模型与算法的应用,主要讲述的是图中左上五部分的开发应用。


【书摘与插画】

返回顶部