提交 63b5d91c 编写于 作者: W wizardforcel

2020-12-16 21:12:29

上级 359ebb4f
......@@ -9,10 +9,10 @@
* 人工智能分支的分类
* 机器学习的五个流派
* 什么是图灵测试?
* 什么是理性代理
* 什么是理性智能体
* 什么是一般问题解决器?
* 如何建立智能体
* 如何安装 Python3 和相关软件
* 如何安装 Python3 和相关包
# 什么是 AI?
......@@ -53,7 +53,7 @@
* 我们处理海量且无法克服的数据。 人脑无法跟踪这么多数据。
* 数据同时来自多个来源。 数据是杂乱无章的。
* 从这些数据中获得的知识必须不断更新,因为数据本身一直在变化。
* 传感和驱动必须实时,高精度地进行
* 传感和驱动必须实时,高精度地运转
即使人脑擅长分析我们周围的事物,也无法跟上上述条件。 因此,我们需要设计和开发可以做到这一点的智能机器。 我们需要可以实现以下目的的 AI 系统:
......@@ -69,7 +69,7 @@
了解 AI 的各个研究领域非常重要,这样我们才能选择正确的框架来解决给定的现实世界问题。 有几种方法可以对 AI 的不同分支进行分类:
* 监督学习与无监督学习与强化学习
* 人工智能与狭义智
* 人工智能与狭义智
* 按人体功能:
* 机器视觉
* 机器学习
......@@ -268,7 +268,7 @@ $ python3 --version
## 在 Mac OS X 上安装
如果您使用的是 Mac OS X,建议使用 Homebrew 来安装 Python3。它是 Mac OS X 的出色软件包安装程序,非常易于使用。 如果没有 Homebrew,则可以使用以下命令进行安装:
如果您使用的是 Mac OS X,建议使用 Homebrew 来安装 Python3。它是 Mac OS X 的出色包安装程序,非常易于使用。 如果没有 Homebrew,则可以使用以下命令进行安装:
```py
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
......@@ -298,7 +298,7 @@ $ python3 --version
如果使用 Windows,建议您使用 Python3 的`SciPy-stack`兼容发行版。Anaconda 非常流行并且易于使用。 [您可以在以下位置找到安装说明](https://www.continuum.io/downloads)
如果要检查 Python3 的其他`SciPy-stack`兼容发行版,可以在[这个页面](http://www.scipy.org/install.html)中找到它们。 这些发行版的好处是它们附带了所有必需的软件包。 如果使用这些版本之一,则无需单独安装软件包。
如果要检查 Python3 的其他`SciPy-stack`兼容发行版,可以在[这个页面](http://www.scipy.org/install.html)中找到它们。 这些发行版的好处是它们附带了所有必需的包。 如果使用这些版本之一,则无需单独安装包。
安装后,请像前面一样运行检查命令:
......@@ -310,9 +310,9 @@ $ python3 --version
# 安装包
在本书中,我们将使用各种软件包,例如 NumPy,SciPy,scikit-learn 和 matplotlib。 在继续之前,请确保安装这些软件包。
在本书中,我们将使用各种包,例如 NumPy,SciPy,scikit-learn 和 matplotlib。 在继续之前,请确保安装这些包。
如果您使用 Ubuntu 或 Mac OS X,则安装这些软件包非常简单。 所有这些软件包都可以使用单行命令安装。 这是与相关的安装链接:
如果您使用 Ubuntu 或 Mac OS X,则安装这些包非常简单。 所有这些包都可以使用单行命令安装。 这是与相关的安装链接:
* [NumPy](http://docs.scipy.org/doc/numpy-1.10.1/user/install.html)
* [SciPy](http://www.scipy.org/install.html)
......@@ -323,7 +323,7 @@ $ python3 --version
# 加载数据
为了构建学习模型,我们需要代表世界的数据。 现在我们已经安装了必要的 Python 软件包,让我们看看如何使用这些软件包与数据进行交互。 通过键入以下命令,输入 Python 命令提示符:
为了构建学习模型,我们需要代表世界的数据。 现在我们已经安装了必要的 Python 包,让我们看看如何使用这些包与数据进行交互。 通过键入以下命令,输入 Python 命令提示符:
```py
$ python3
......@@ -396,6 +396,6 @@ scikit-learn 包中还有可用的图像数据集。 每个图像的形状均为
* 如何使用机器学习开发智能体
* 不同类型的机器学习模型
我们还介绍了如何在各种操作系统上安装 Python3,以及如何安装构建 AI 应用所需的必要软件包。 我们讨论了如何使用这些包来加载 scikit-learn 中可用的数据。
我们还介绍了如何在各种操作系统上安装 Python3,以及如何安装构建 AI 应用所需的必要包。 我们讨论了如何使用这些包来加载 scikit-learn 中可用的数据。
在下一章中,我们将学习监督学习以及如何建立分类和回归模型。
\ No newline at end of file
......@@ -175,7 +175,7 @@ g=sns.heatmap(data[top_corr_features].corr(),annot=True,cmap="RdYlGn")
图 3:相关热图
存在更多形式化和较少的直观方法来自动选择特征。 存在许多这些方法,并且在 scikit-learn 软件包中实现了许多方法。 接下来提到对这些方法进行分类的一种方法。
存在更多形式化和较少的直观方法来自动选择特征。 存在许多这些方法,并且在 scikit-learn 包中实现了许多方法。 接下来提到对这些方法进行分类的一种方法。
### 基于包装器的方法
......
......@@ -50,7 +50,7 @@
原始数据是机器学习算法的推动力。 但是就像我们不能将原油放进汽车中,而是必须使用汽油一样,机器学习算法希望在训练过程开始之前就可以以某种方式格式化数据。 为了准备通过机器学习算法提取的数据,必须对数据进行预处理并将其转换为正确的格式。 让我们看一下实现这一目标的一些方法。
对于我们将要分析工作的示例,我们将需要导入一些 Python 软件包:
对于我们将要分析工作的示例,我们将需要导入一些 Python 包:
```py
import numpy as np
......@@ -212,7 +212,7 @@ L2 normalized data:
标签通常是单词,因为单词可以被人类理解。 训练数据用单词标记,以便可以跟踪映射。 要将单词标签转换为数字,可以使用标签编码器。 标签编码是指将单词标签转换为数字的过程。 这使算法能够处理数据。 让我们看一个例子:
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -283,9 +283,9 @@ print("Decoded labels =", list(decoded_list))
* 它的派生更容易计算
* 将非线性引入模型的简单方法
它与广义线性模型分析密切相关,在广义线性模型分析中,我们尝试将一条线拟合到一堆点以最小化误差。 代替线性回归,我们使用逻辑回归。 逻辑回归本身不是分类技术,但是以这种方式使用来促进分类。 由于其简单性,它通常在机器学习中使用。 让我们看看如何使用逻辑回归构建分类器。 在继续操作之前,请确保已安装软件包。 如果不是,[则可以在这里找到](https://docs.python.org/2/library/tkinter.html)
它与广义线性模型分析密切相关,在广义线性模型分析中,我们尝试将一条线拟合到一堆点以最小化误差。 代替线性回归,我们使用逻辑回归。 逻辑回归本身不是分类技术,但是以这种方式使用来促进分类。 由于其简单性,它通常在机器学习中使用。 让我们看看如何使用逻辑回归构建分类器。 在继续操作之前,请确保已安装包。 如果不是,[则可以在这里找到](https://docs.python.org/2/library/tkinter.html)
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -325,7 +325,7 @@ visualize_classifier(classifier, X, y)
必须先定义功能,然后才能使用它。 在本章中,我们将多次使用此函数,因此最好在一个单独的文件中对其进行定义并导入该函数。 此功能在提供的`utilities.py`文件中提供。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -419,7 +419,7 @@ classifier = linear_model.LogisticRegression(solver='liblinear', C=100)
给定类别变量,我们可以仅查看给定功能如何影响它,而不管其对其他功能的影响。 例如,如果发现动物,有四条腿,有一条尾巴并且以大约 70 MPH 的速度奔跑,则可以将其视为猎豹。 朴素的贝叶斯分类器认为这些特征中的每一个都对结果有独立的贡献。 结果是指该动物是猎豹的可能性。 我们并不关心皮肤图案,腿数,尾巴的存在和运动速度之间可能存在的相关性。 让我们看看如何构建朴素贝叶斯分类器。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -573,7 +573,7 @@ F1: 99.75%
根据当前的问题,我们可能必须优化算法以减少误报率或误报率。 例如,在生物识别系统中,避免误报非常重要,因为错误的人可能会访问敏感信息。 让我们看看如何创建一个混淆矩阵。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -657,7 +657,7 @@ targets = ['Class-0', 'Class-1', 'Class-2', 'Class-3', 'Class-4'] print('\n', cl
我们将构建一个支持向量机分类器,根据 14 个属性预测给定人员的收入等级。 我们的目标是查看年收入是高于还是低于 50,000 美元。 因此,这是一个二进制分类问题。 我们将使用[这个页面](https://archive.ics.uci.edu/ml/datasets/Census+Income)上提供的普查收入数据集。 此数据集中需要注意的一项是,每个数据点都是单词和数字的混合体。 我们不能使用原始格式的数据,因为算法不知道如何处理单词。 我们无法使用标签编码器来转换所有内容,因为数字数据很有价值。 因此,我们需要结合使用标签编码器和原始数值数据来构建有效的分类器。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -824,7 +824,7 @@ F1 score: 66.82%
# 建立单变量回归器
让我们看看如何构建单个变量回归模型。 创建一个新的 Python 文件并导入以下软件包:
让我们看看如何构建单个变量回归模型。 创建一个新的 Python 文件并导入以下包:
```py
import pickle
......@@ -973,7 +973,7 @@ New mean absolute error = 0.59
# 建立多元回归
在的上一部分中,我们讨论了如何为单个变量构建回归模型。 在本节中,我们将处理多维数据。 创建一个新的 Python 文件并导入以下软件包:
在的上一部分中,我们讨论了如何为单个变量构建回归模型。 在本节中,我们将处理多维数据。 创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -1093,7 +1093,7 @@ Polynomial regression:
让我们看看如何使用 SVM 概念构建回归变量来估计房价。 我们将使用`sklearn`中可用的数据集,其中每个数据点由 13 个属性定义。
我们的目标是根据这些属性估计住房价格。 创建一个新的 Python 文件并导入以下软件包:
我们的目标是根据这些属性估计住房价格。 创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......
......@@ -25,7 +25,7 @@
## 建立决策树分类器
让我们看看如何使用 Python 中的决策树构建分类器。 创建一个新的 Python 文件并导入以下软件包:
让我们看看如何使用 Python 中的决策树构建分类器。 创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -169,7 +169,7 @@ plt.show()
让我们看看如何可以基于随机森林和极其随机森林构建分类器。 构造两个分类器的方法非常相似,因此使用输入标志来指定需要构建哪个分类器。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import argparse
......@@ -390,7 +390,7 @@ $ python3 random_forests.py --classifier-type erf
分类器仅与用于训练的数据一样。 现实世界中面临的一个普遍问题是数据质量问题。 为了使分类器表现良好,每个分类器需要看到相等数量的点。 但是,当在现实世界中收集数据时,并不总是能够确保每个类都具有完全相同数量的数据点。 如果一个类别的数据点数是另一类别的 10 倍,则分类器倾向于偏向更多类别。 因此,我们需要确保考虑到这种不平衡算法。 让我们看看如何做到这一点。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import sys
......@@ -545,7 +545,7 @@ $ python3 class_imbalance.py balance
在使用分类器时,并非总是可能知道要使用什么最佳参数。 通过手动检查所有可能的组合来使用暴力效率不高。 这是网格搜索变得有用的地方。 网格搜索使我们可以指定范围为的值,分类器将自动运行各种配置以找出参数的最佳组合。 让我们来看看如何做。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -653,7 +653,7 @@ for metric in metrics:
然后将这些分类器进行级联,并通过加权多数投票做出决定。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -776,7 +776,7 @@ Tuesday,00:00,San Francisco,no,3
我们的目标是通过使用给定的信息来预测车辆行驶的数量。 由于输出变量是连续值,因此我们需要构建一个可以预测输出的回归变量。 我们将使用极其随机的森林来构建此回归器。 让我们继续进行,看看如何做到这一点。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......
......@@ -39,7 +39,7 @@ K 均值算法是一种用于对数据进行聚类的众所周知的算法。
让我们对二维数据应用 K 均值聚类,以了解其工作原理。 我们将使用提供给您的`data_clustering.txt`文件中的数据。 每行包含两个逗号分隔的数字。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```
import numpy as np
......@@ -186,7 +186,7 @@ MeanShift 的目标是识别质心的位置。 对于训练数据集中的每个
让我们看看如何使用`MeanShift`估计给定数据集中的最佳簇数。 `data_clustering.txt`文件中的数据将用于分析。 该文件与“使用 K 均值算法聚类数据”部分中使用的文件相同。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```
import numpy as np
......@@ -287,7 +287,7 @@ plt.show()
轮廓分数范围的值在`-1``1`之间。 接近`1`的分数表示该数据点与群集中的其他数据点非常相似,而接近`-1`的分数指示该数据点与集群中其他数据点不同。 一种思考的方法是,如果有太多带有负轮廓分数的点,那么数据中的簇可能太少或太多。 我们需要再次运行聚类算法以找到最佳数目的聚类。 理想情况下,我们希望具有较高的正值。 根据业务问题,我们不需要优化并具有尽可能高的价值,但是通常,如果我们的剪影得分接近`1`,则表明数据可以很好地聚类。 如果分数接近`-1`,则表明我们用于分类的变量有噪声,并且不包含太多信号。
让我们看看如何使用轮廓分数来估计聚类性能。 创建一个新的 Python 文件并导入以下软件包:
让我们看看如何使用轮廓分数来估计聚类性能。 创建一个新的 Python 文件并导入以下包:
```
import numpy as np
......@@ -411,7 +411,7 @@ plt.show()
## 基于高斯混合模型构建分类器
让我们基于高斯混合模型构建分类器。 创建一个新的 Python 文件并导入以下软件包:
让我们基于高斯混合模型构建分类器。 创建一个新的 Python 文件并导入以下包:
```
import numpy as np
......@@ -598,7 +598,7 @@ Accuracy on testing data = 86.6666666667
还有一个称为首选项的参数,该参数控制将发现的示例数量。 如果选择较高的值,则将导致算法找到太多的聚类。 如果选择一个较低的值,则将导致少数簇。 最佳值是点之间的中间相似度。
让我们使用“相似性传播”模型来查找股票市场中的子组。 我们将使用开盘价和收盘价之间的股票报价变化作为控制特征。 创建一个新的 Python 文件并导入以下软件包:
让我们使用“相似性传播”模型来查找股票市场中的子组。 我们将使用开盘价和收盘价之间的股票报价变化作为控制特征。 创建一个新的 Python 文件并导入以下包:
```
import datetime
......@@ -705,7 +705,7 @@ for i in range(num_labels + 1):
让我们看看如何运用无监督学习技术根据客户的购物习惯来细分市场。 为您提供了一个名为`sales.csv`的文件。 该文件包含来自多家零售服装店的各种上衣的销售详细信息。 目标是确定模式并根据这些商店中售出的商品数量来细分市场。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```
import csv
......
......@@ -14,7 +14,7 @@
推荐人系统采用最近邻的概念来找到好的建议。 名称*最近邻*是指从给定数据集中查找到输入点最近的数据点的过程。 这通常用于构建分类系统,该分类系统根据输入数据点与各种类别的接近程度对数据点进行分类。 让我们看看如何找到给定数据点的最近邻。
首先,创建一个新的 Python 文件并导入以下软件包:
首先,创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -112,7 +112,7 @@ plt.show()
K 近邻分类器是使用 K 近邻算法对给定数据点进行分类的分类模型。 该算法在训练数据集中找到最接近的`K`个数据点,以识别输入数据点的类别。 然后,它将基于多数投票为该数据点分配一个类别。 从这些`K`数据点的列表中,我们查看相应的类别,然后选择投票数最高的类别。`K`的值取决于当前的问题。 让我们看看如何使用此模型构建分类器。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -320,7 +320,7 @@ Predicted output: 1
**皮尔森分数**是两个数据点之间相关性的度量。 它使用两个数据点之间的协方差以及它们各自的标准差来计算分数。 得分范围从`-1``+1`。 分数`+1`表示数据点相似,分数`-1`表示数据点相似。 分数`0`表示它们之间没有相关性。 让我们看看如何计算这些分数。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import argparse
......@@ -558,7 +558,7 @@ Pearson score:
让我们开始构建协同过滤系统。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import argparse
......@@ -683,7 +683,7 @@ $ python3 collaborative_filtering.py --user "Clarissa Jackson"
现在所有的构建块都已就绪,现在该构建电影推荐系统了。 我们学习了构建推荐系统所需的所有基本概念。 在本节中,我们将基于文件`ratings.json`中提供的数据构建电影推荐系统。 此文件包含一组人物及其对各种电影的评分。 要查找给定用户的电影推荐,我们需要在数据集中找到相似的用户,然后提出针对此人的推荐。 让我们开始吧。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import argparse
......
......@@ -110,22 +110,22 @@ wounded(john).
在整个逻辑编程中,此结构以各种形式使用,以解决各种类型的问题。 让我们继续前进,看看如何解决 Python 中的这些问题。
# 安装 Python 软件
# 安装 Python 包
在开始使用 Python 进行逻辑编程之前,我们需要安装几个软件包。 软件包`logpy`是一个 Python 软件包,可在 Python 中进行逻辑编程。 我们还将针对某些问题使用 SymPy。 因此,我们继续使用`pip`安装`logpy``sympy`
在开始使用 Python 进行逻辑编程之前,我们需要安装几个包。 包`logpy`是一个 Python 包,可在 Python 中进行逻辑编程。 我们还将针对某些问题使用 SymPy。 因此,我们继续使用`pip`安装`logpy``sympy`
```py
$ pip3 install logpy
$ pip3 install sympy
```
如果在`logpy`的安装过程中出现错误,则可以从[这个页面](https://github.com/logpy/logpy)的源代码安装它。 一旦成功安装了这些软件包,就可以继续进行下一部分的。
如果在`logpy`的安装过程中出现错误,则可以从[这个页面](https://github.com/logpy/logpy)的源代码安装它。 一旦成功安装了这些包,就可以继续进行下一部分的。
# 匹配数学表达式
我们一直遇到数学运算。 逻辑编程是比较表达式并找出未知值的有效方法。 让我们看看如何做到这一点。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
from logpy import run, var, fact
......@@ -215,7 +215,7 @@ print(run(0, (a, b, c), la.eq_assoccomm(expression3, expression_orig)))
让我们看看如何使用逻辑编程检查素数。 我们将使用`logpy`中可用的构造来确定给定列表中的哪些数字是质数,以及找出给定数字是否为质数。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import itertools as it
......@@ -316,7 +316,7 @@ List of first 7 prime numbers: (2, 3, 5, 7, 11, 13, 17)
这是一个简单的 JSON 文件,用于指定父母之间的关系。 请注意,我们没有指定有关丈夫和妻子,祖父母或叔叔的任何信息。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import json
......@@ -642,7 +642,7 @@ for item in output:
图 7:解谜器输入数据
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
from logpy import *
......
......@@ -105,9 +105,9 @@ CSP 是数学上的问题,定义为一组必须满足一些约束的变量。
让我们看看如何使用贪婪搜索解决问题。 在此问题中,我们将尝试根据字母重新创建输入字符串。 我们将要求算法搜索解决方案空间并构建解决方案的路径。
在本章中,我们将使用名为`simpleai`软件包。 它包含各种例程,这些例程可用于使用启发式搜索技术构建解决方案。 可在[这个页面](https://github.com/simpleai-team/simpleai)上获得。 为了使它在 Python3 中工作,我们需要对源代码进行一些更改。随同本书的代码一起提供了一个名为`simpleai.zip`的文件。 将此文件解压缩到名为`simpleai`的文件夹中。 此文件夹包含对原始库的所有必要更改,以使其能够在 Python3 中工作。将`simpleai`文件夹与您的代码位于同一文件夹中,你将能够顺利运行你的代码。
在本章中,我们将使用名为`simpleai`的包。 它包含各种例程,这些例程可用于使用启发式搜索技术构建解决方案。 可在[这个页面](https://github.com/simpleai-team/simpleai)上获得。 为了使它在 Python3 中工作,我们需要对源代码进行一些更改。随同本书的代码一起提供了一个名为`simpleai.zip`的文件。 将此文件解压缩到名为`simpleai`的文件夹中。 此文件夹包含对原始库的所有必要更改,以使其能够在 Python3 中工作。将`simpleai`文件夹与您的代码位于同一文件夹中,你将能够顺利运行你的代码。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import argparse
......@@ -247,7 +247,7 @@ $ python3 greedy_search.py --input-string 'Artificial Intelligence with Python'
我们已经讨论了如何制定 CSP。 让我们将应用于实际问题。 在此问题中,我们有一个名称列表,每个名称可以采用一组固定的值。 这些人之间还存在一系列需要满足的约束。 让我们来看看如何做。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
from simpleai.search import CspProblem, backtrack, \
......@@ -395,7 +395,7 @@ print('\nMinimum conflicts:', min_conflicts(problem))
在上图中,我们有一些区域用名称标记。 目标是用四种颜色进行着色,以使相邻区域都不具有相同的颜色。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
from simpleai.search import CspProblem, backtrack
......@@ -494,7 +494,7 @@ if __name__=='__main__':
我们将此求和用作启发式方法。 如我们所见,第二笔费用基本上是不理想的估计。 如果是完美的,那么`A*`算法将很快到达解决方案。 但这不是通常的情况。 找到解决方案的最佳路径需要花费一些时间。 `A*`有效地找到最佳路径,并且是其中最流行的技术之一。
让我们使用`A*`算法来构建 8 难题求解器。 这是`simpleai`库中提供的解决方案的变体。 创建一个新的 Python 文件并导入以下软件包:
让我们使用`A*`算法来构建 8 难题求解器。 这是`simpleai`库中提供的解决方案的变体。 创建一个新的 Python 文件并导入以下包:
```py
from simpleai.search import astar, SearchProblem
......@@ -682,7 +682,7 @@ for i, (action, state) in enumerate(result.path()):
图 12:迷宫问题的示例
`#`符号表示障碍物。`o`代表起点,`x`代表目标。 目的是找到从起点到终点的最短路径。 让我们看看如何在 Python 中做到这一点。 以下解决方案是`simpleai`库中提供的解决方案的变体。 创建一个新的 Python 文件并导入以下软件包:
`#`符号表示障碍物。`o`代表起点,`x`代表目标。 目的是找到从起点到终点的最短路径。 让我们看看如何在 Python 中做到这一点。 以下解决方案是`simpleai`库中提供的解决方案的变体。 创建一个新的 Python 文件并导入以下包:
```py
import math
......
......@@ -72,7 +72,7 @@
$ pip3 install deap
```
现在已经安装了该软件包,让我们快速对其进行测试。 通过键入以下命令进入 Python shell:
现在已经安装了该包,让我们快速对其进行测试。 通过键入以下命令进入 Python shell:
```py
$ python3
......
......@@ -471,7 +471,7 @@ Learning Studio 不需要任何编程。 通过直观地连接数据集和模块
| 内置算法 | 分类、回归、聚类、时间序列、文本分析、异常检测 | 外部包可以导入 | 分类、回归、聚类 |
| 自动超参数调整 | 否 | 是 | 否 |
| 自动 ML | 否 | 是 | 否 |
| 易于扩展 | 不简单 | 可以通过 PIP 轻松安装 Python 软件包 | 不简单 |
| 易于扩展 | 不简单 | 可以通过 PIP 轻松安装 Python 包 | 不简单 |
| Python 支持 | 是 | 是 | 是 |
| R 支持 | 是 | 否 | 否 |
| 内置容器 | 否 | 是 | 否 |
......
......@@ -70,7 +70,7 @@ $ pip3 install easyAI
在此游戏中,有一堆硬币,每个玩家轮流从该堆中取出许多硬币。 可从堆中取出的硬币数量有上限和下限。 游戏的目的是避免拿最后一枚硬币。 该配方是`easyAI`库中给出的“骨头游戏”配方的一种变体。 让我们看看如何构建一个可以与用户对战的游戏。
创建一个新的 Python 文件,并导入以下软件包:
创建一个新的 Python 文件,并导入以下包:
```py
from easyAI import TwoPlayersGame, id_solve, Human_Player, AI_Player
......@@ -214,7 +214,7 @@ if __name__ == "__main__":
井字棋(Nights and Crosss)是,也许是世界上最著名的游戏之一。 让我们看看如何构建一个可以与用户对战的游戏。 这是`easyAI`库中给出的井字棋食谱的一个较小变体。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
from easyAI import TwoPlayersGame, AI_Player, Negamax
......@@ -330,7 +330,7 @@ if __name__ == "__main__":
Connect Four™ 是,这是一款流行的两人游戏,以 Milton Bradley 商标出售。 它也以其他名称(例如“连续四个”或“四个向上”)而闻名。 在此游戏中,玩家轮流将光盘放入由六行七列组成的垂直网格中。 目标是连续获取四张光盘。 这是`easyAI`库中提供的“连接四个”配方的变体。 让我们看看如何构建它。 在此配方中,我们将创建两个可以相互对抗的机器人,而不是与计算机对抗。 每个人将使用不同的算法来查看哪个获胜。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -489,7 +489,7 @@ if __name__ == '__main__':
**Hexapawn** 是一款两人游戏,尺寸为`N×M`。 棋子存在于棋盘的两侧,目标是将棋子一直推进到棋盘的另一端。 国际象棋的标准典当规则适用。 这是`easyAI`库中提供的 Hexapawn 配方的变体。 将创建两个机器人,并使其相互对峙。 让我们创建代码。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
from easyAI import TwoPlayersGame, AI_Player, \
......
......@@ -30,7 +30,7 @@
最常见的是,语音信号以 44,100 Hz 采样。 这意味着语音信号的每一秒被分解成 44,100 个部分,并且这些时间戳中每个时间戳的值都存储在输出文件中。 我们每`1/44,100`秒保存一次音频信号的值。 在这种情况下,我们说音频信号的采样频率为 44,100 Hz。 通过选择高采样频率,当人们听音频信号时,它似乎是连续的。 让我们继续进行可视化音频信号。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -106,7 +106,7 @@ plt.show()
如果我们剖析频率分量,我们可以识别很多特征。 任何给定的音频信号的特征在于其在频谱中的分布。 为了将时域信号转换为频域,我们需要使用数学工具,例如**傅里叶变换**。 如果您需要快速学习傅立叶变换,[请查看以下链接](http://www.thefouriertransform.com)。 让我们看看如何将音频信号从时域转换到频域。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -214,7 +214,7 @@ plt.show()
现在我们知道音频信号是如何工作的,让我们看看如何生成一个这样的信号。 我们可以使用 NumPy 包生成各种音频信号。 由于音频信号是**正弦波**的混合,我们可以使用它来生成具有一些预定义参数的音频信号。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -311,7 +311,7 @@ plt.show()
让我们使用此信息来生成音乐信号。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import json
......@@ -457,11 +457,11 @@ if __name__=='__main__':
为了从音频信号中提取频率特征,MFCC 首先提取功率谱。 然后,它使用滤波器组和**离散余弦变换****DCT**)提取特征。 如果您有兴趣进一步研究 MFCC,[请查看以下链接](http://practicalcryptography.com/miscellaneous/machine-learning/guide-mel-frequency-cepstral-coefficients-mfccs)
我们将使用一个名为`python_speech_features`的程序包来提取 MFCC 特征。 [软件包在这里可用](http://python-speech-features.readthedocs.org/en/latest)
我们将使用一个名为`python_speech_features`的程序包来提取 MFCC 特征。 [该包在这里可用](http://python-speech-features.readthedocs.org/en/latest)
为了易于使用,相关的文件夹已包含在代码包中。 您将在代码包中看到一个名为`features`的文件夹,其中包含使用此软件包所需的文件。 让我们看看如何提取 MFCC 特征。
为了易于使用,相关的文件夹已包含在代码包中。 您将在代码包中看到一个名为`features`的文件夹,其中包含使用此包所需的文件。 让我们看看如何提取 MFCC 特征。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -562,7 +562,7 @@ plt.show()
我们将使用名为`hmmlearn`的程序包来构建我们的语音识别系统。 [您可以在此处了解更多信息](http://hmmlearn.readthedocs.org/en/latest)
您可以通过运行以下命令来安装软件包:
您可以通过运行以下命令来安装包:
```py
$ pip3 install hmmlearn
......@@ -576,7 +576,7 @@ $ pip3 install hmmlearn
我们将为每个单词建立一个 HMM 模型,并存储所有模型以供参考。 当我们想识别未知音频文件中的单词时,我们将在所有这些模型中运行该单词,并选择得分最高的单词。 让我们看看如何建立这个系统。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import os
......
......@@ -6,7 +6,7 @@
在本章结束时,您将熟悉以下主题:
* 安装相关的 NLP 软件
* 安装相关的 NLP 包
* 标记文本数据
* 使用词干将单词转换为其基本形式
* 使用词义化将单词转换为其基本形式
......@@ -25,7 +25,7 @@
为了解决这个问题,NLP 研究人员开始使用机器学习方法来开发各种应用。 为了构建这样的应用,需要获取大量的文本,然后在该数据上训练算法以执行各种任务,例如对文本进行分类,分析情感和对主题进行建模。 对算法进行训练,以检测输入文本数据中的模式并从中获取见解。
在本章中,我们将讨论用于分析文本和构建 NLP 应用的各种基础概念。 这将使我们了解如何从给定的文本数据中提取有意义的信息。 我们将使用称为**自然语言工具包****NLTK**)的 Python 软件包来构建这些应用。 您可以通过运行以下命令来安装它:
在本章中,我们将讨论用于分析文本和构建 NLP 应用的各种基础概念。 这将使我们了解如何从给定的文本数据中提取有意义的信息。 我们将使用称为**自然语言工具包****NLTK**)的 Python 包来构建这些应用。 您可以通过运行以下命令来安装它:
```py
$ pip3 install nltk
......@@ -46,13 +46,13 @@ $ python3
>>> nltk.download()
```
在本章中,我们还将使用名为`gensim`软件包。 `gensim`是健壮的语义建模库,对许多应用都非常有用。 可以通过运行以下命令来安装它:
在本章中,我们还将使用名为`gensim`的包。 `gensim`是健壮的语义建模库,对许多应用都非常有用。 可以通过运行以下命令来安装它:
```py
$ pip3 install gensim
```
您可能需要另一个软件`pattern`才能使`gensim`正常运行。 您可以通过运行以下命令来安装它:
您可能需要另一个包`pattern`才能使`gensim`正常运行。 您可以通过运行以下命令来安装它:
```py
$ pip3 install pattern
......@@ -64,7 +64,7 @@ $ pip3 install pattern
当我们处理文本时,我们需要将其分解成较小的部分进行分析。 为此,可以应用分词。 分词是将文本分为一组片段的过程,例如单词或句子。 这些片段称为令牌。 根据我们要执行的操作,我们可以定义自己的方法以将文本分为许多标记。 让我们看一下如何使用 NLTK 对输入文本分词。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
from nltk.tokenize import sent_tokenize, \
......@@ -118,7 +118,7 @@ print(WordPunctTokenizer().tokenize(input_text))
分析文本时,提取这些基本形式很有用。 这样做可以提取从输入文本中导出的有用统计信息。 词干提取是实现此目的的一种方法。 词干提取器的目标是将单词从其不同形式简化为通用的基本形式。 基本上,这是一种启发式过程,可切断单词的结尾以提取其基本形式。 让我们看看如何使用 NLTK 做到这一点。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
from nltk.stem.porter import PorterStemmer
......@@ -182,7 +182,7 @@ for word in input_words:
词形还原过程使用单词的词法和词法分析。 它通过删除诸如`ing``ed`之类的词尾变化来获得基本形式。 任何单词的基本形式都称为词形。 如果对`calves`一词进行词形还原,则应该得到`calf`作为输出。 需要注意的一件事是,输出取决于单词是动词还是名词。 让我们看看如何使用 NLTK 做到这一点。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
from nltk.stem import WordNetLemmatizer
......@@ -236,7 +236,7 @@ for word in input_words:
当我们处理大型文本文档时,将文本分成大块以提取有意义的信息变得很重要。 在本节中,我们将看到如何将输入文本分为几部分。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -341,7 +341,7 @@ if __name__=='__main__':
现在,我们已经使用“词袋”模型提取了这些特征,我们可以使用机器学习算法来分析这些数据。
让我们看看如何在 NLTK 中构建“语言袋”模型。 创建一个新的 Python 文件并导入以下软件包:
让我们看看如何在 NLTK 中构建“语言袋”模型。 创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -442,7 +442,7 @@ for word, item in zip(vocabulary, document_term_matrix.T):
然后,我们将术语频率和文档的逆频率结合起来,以制定特征向量来对文档进行分类。 这项工作是深入分析文本以获得更深层含义的基础,例如情感分析,文本上下文或主题分析。 让我们看看如何构建类别预测器。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
from sklearn.datasets import fetch_20newsgroups
......@@ -561,7 +561,7 @@ for sent, category in zip(input_data, predictions):
另外,在诸如美国的异质社会中,将会有许多种族名称不遵循英语规则。 通常,我们可以对各种名称进行有根据的猜测。 在这个简单的示例中,我们将使用启发式方法来构建特征向量,并使用它来训练分类器。 这里将使用的启发式是给定名称的最后`N`个字母。 例如,如果名称以`ia`结尾,则很可能是女性名称,例如`Amelia``Genelia`。 另一方面,如果名称以`rk`结尾,则可能是男性名称,例如`Mark``Clark`。 由于我们不确定要使用的字母的确切数量,因此我们将使用此参数并找出最佳答案。 让我们来看看如何做。
创建一个新的 Python 文件,然后导入以下软件包:
创建一个新的 Python 文件,然后导入以下包:
```py
import random
......@@ -671,7 +671,7 @@ input_names = ['Alexander', 'Danielle', 'David', 'Cheryl']
我们将使用朴素的贝叶斯分类器来构建此情感分析器。 首先,从文本中提取所有唯一的单词。 NLTK 分类器需要将此数据以字典的形式排列,以便可以吸收它。 将文本数据分为训练和测试数据集后,将对朴素贝叶斯分类器进行训练,以将评论分为正面和负面。 然后,可以计算和显示表示正面和负面评论的最有用的信息。 该信息很有趣,因为它显示了正在使用的单词来表示各种反应。
让我们看看如何实现这一目标。 首先,创建一个新的 Python 文件并导入以下软件包:
让我们看看如何实现这一目标。 首先,创建一个新的 Python 文件并导入以下包:
```py
from nltk.corpus import movie_reviews
......@@ -817,7 +817,7 @@ if __name__=='__main__':
**潜在狄利克雷分布**是一种主题建模技术,其基本概念是文本的给定片段是多个主题的组合。 让我们考虑以下句子:数据可视化是财务分析中的重要工具。 这句话有多个主题,例如数据,可视化和财务。 这种组合有助于识别大型文档中的文本。 它是一个统计模型,试图捕获概念并基于这些概念创建模型。 该模型假定文档是基于这些主题通过随机过程生成的。 主题是固定单词词汇的分布。 让我们看看如何在 Python 中进行主题建模。
`gensim`库将在本节中使用。 该库已在本章的第一部分中安装。 在继续操作之前,请确保已安装。 创建一个新的 Python 文件并导入以下软件包:
`gensim`库将在本节中使用。 该库已在本章的第一部分中安装。 在继续操作之前,请确保已安装。 创建一个新的 Python 文件并导入以下包:
```py
from nltk.tokenize import RegexpTokenizer
......
......@@ -271,7 +271,7 @@ DialogFlow 中的开发利用了我们之前讨论的两个主要概念-意向
## 使用 Python 将聊天机器人集成到网站中
调用 DialogFlow 聊天机器人的另一种方法是使用 Python。 首先,我们需要安装运行代码所需的软件包要求:
调用 DialogFlow 聊天机器人的另一种方法是使用 Python。 首先,我们需要安装运行代码所需的包要求:
```py
$ pip3 install DialogFlow
......
......@@ -45,11 +45,11 @@
时间序列数据分析被广泛应用于金融,传感器数据分析,语音识别,经济学,天气预报,制造以及更多领域。 在本章中,我们将广泛使用一个名为 Pandas 的库来处理与时间序列相关的操作。
Pandas 是强大的和流行的 Python 软件包,用于数据处理和分析。 具体来说,它提供了用于操纵表结构的方法和操作。 这是一个可爱的名字,让人联想到毛茸茸的熊,但这里有一些没用的琐事。 Pandas 的名称来自*面板数据*一词,这是计量经济学术语,用于包含多个时间段内观测值的数据集。
Pandas 是强大的和流行的 Python 包,用于数据处理和分析。 具体来说,它提供了用于操纵表结构的方法和操作。 这是一个可爱的名字,让人联想到毛茸茸的熊,但这里有一些没用的琐事。 Pandas 的名称来自*面板数据*一词,这是计量经济学术语,用于包含多个时间段内观测值的数据集。
我们还将使用其他几个有用的软件包,例如`hmmlearn``pystruct`。 确保继续安装它们。
我们还将使用其他几个有用的包,例如`hmmlearn``pystruct`。 确保继续安装它们。
可以通过运行以下命令来安装这些软件包:
可以通过运行以下命令来安装这些包:
```py
$ pip3 install pandas
......@@ -78,7 +78,7 @@ Pandas 可以说是 Python 中最重要的库。 学习良好地使用其方法
在本节中,我们将使用它来将数字序列转换为时间序列数据并将其可视化。 Pandas 提供了添加时间戳,组织数据然后对其进行有效操作的选项。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -191,7 +191,7 @@ if __name__=='__main__':
现在我们已经加载了时间序列数据,让我们看看如何对其进行切片。 切片的过程是指将数据分为多个子间隔并提取相关信息。 当我们使用时间序列数据集时,这很有用。 我们将使用时间戳来切片数据,而不是使用索引。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -251,7 +251,7 @@ plt.show()
Pandas 库可以有效地处理时间序列数据,并执行各种操作,例如过滤和加法。 可以设置条件,Pandas 会过滤数据集并根据条件返回正确的子集。 时间序列数据也可以加载和过滤。 让我们看另一个例子来说明这一点。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -337,7 +337,7 @@ plt.show()
为了从时间序列数据中提取有意义的见解,我们可以从中生成统计数据。 这些统计信息的示例包括平均值,方差,相关性,最大值等操作。 这些统计信息可以使用窗口滚动计算。 我们可以使用预定的窗口大小,并在该窗口内计算这些统计信息。 当我们可视化一段时间内的统计信息时,我们可能会看到有趣的模式。 让我们看一个如何从时间序列数据中提取这些统计信息的示例。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -513,7 +513,7 @@ P(NY) = 0.16
我们可以看到他在巴塞罗那的机会要比其他任何城市都高。 这也具有地理意义,因为巴塞罗那比纽约更靠近伦敦。 让我们看看如何在 Python 中为 HMM 建模。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import datetime
......@@ -615,7 +615,7 @@ CRF 的主要优势之一是它们本质上是有条件的。 HMM 并非如此
这是一个很好的用例,将突出显示识别数据中依存关系的能力。 英语单词中字母的顺序决不是随机的。 例如,考虑单词`random`。 在第一个字母之后的下一个字母将成为元音的可能性高于其在辅音中的可能性。 单词中的第二个字母变为字母`x`的可能性不为零。 我们可以想到几个符合此条件的单词-豁免,准确,展示等。 但是,考虑到第一个字母是`r`,单词中第二个字母是`x`的概率是多少? 我们想不出一个符合该标准的单词。 即使它们存在,也没有那么多,因此可能性较低。 CRF 利用这一事实。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import os
......@@ -774,7 +774,7 @@ if __name__=='__main__':
请不要指望此模型产生的结果将接近生产质量,并且您将能够使用此模型执行实时交易并从中获利。 它将为开始思考如何实现这一目标提供基础。 如果您愿意,我们建议您继续增强模型,并针对不同的数据集强调该模型,并可能将其与当前市场数据一起使用。 我们不对模型的盈利或不盈利做任何表述。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import datetime
......
......@@ -37,13 +37,13 @@
# OpenCV
在本章中,我们将使用名为 OpenCV 的软件包。 其名称暗示了 **OpenCV****开源计算机视觉**)是一个开源跨平台 Python 软件包,可用于启用实时计算机视觉。 该工具起源于英特尔实验室。
在本章中,我们将使用名为 OpenCV 的包。 其名称暗示了 **OpenCV****开源计算机视觉**)是一个开源跨平台 Python 包,可用于启用实时计算机视觉。 该工具起源于英特尔实验室。
OpenCV 可以与 TensorFlow,PyTorch 和 Caffe 结合使用。
**安装**
在本章中,我们将使用名为 OpenCV 的软件包。 [您可以在此处了解更多信息](http://opencv.org)。 在继续操作之前,请确保已安装。 以下是在各种操作系统上使用 Python3 安装 OpenCV 3 的链接:
在本章中,我们将使用名为 OpenCV 的包。 [您可以在此处了解更多信息](http://opencv.org)。 在继续操作之前,请确保已安装。 以下是在各种操作系统上使用 Python3 安装 OpenCV 3 的链接:
* [**Windows**](https://solarianprogrammer.com/2016/09/17/install-opencv-3-with-python-3-on-windows)
* [**Ubuntu**](http://www.pyimagesearch.com/2015/07/20/install-opencv-3-0-and-python-3-4-on-ubuntu)
......@@ -59,7 +59,7 @@ OpenCV 可以与 TensorFlow,PyTorch 和 Caffe 结合使用。
当我们观看实时视频流时,从该流捕获的连续帧之间的差异为我们提供了很多信息。 让我们看看如何获​​取连续帧之间的差异并显示差异。 本节中的代码需要连接的摄像头,因此请确保您的计算机上装有摄像头。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import cv2
......@@ -198,7 +198,7 @@ if __name__=='__main__':
我们可以将捕获的帧从 RGB 转换为 HSV 颜色空间,然后使用颜色阈值跟踪任何给定的对象。 我们应该注意,我们需要知道对象的颜色分布,以便为阈值选择合适的范围。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import cv2
......@@ -333,7 +333,7 @@ if __name__=='__main__':
这里的主要步骤之一是建立背景的模型。 它与帧差分不同,因为我们不差分连续帧。 我们正在对背景进行建模并实时更新,这使其成为一种自适应算法,可以适应不断变化的基线。 因此,它的性能要比帧差分好得多。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import cv2
......@@ -471,7 +471,7 @@ if __name__=='__main__':
让我们看看如何构建跟踪器。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import cv2
......@@ -802,7 +802,7 @@ if __name__ == '__main__':
对于每个补丁,我们在前一帧中在其附近寻找匹配项。 我们根据错误指标选择最佳匹配。 搜索区域大于`3×3`,因为我们寻找一堆不同的`3×3`色块以获得与当前色块最接近的那个。 一旦获得该信息,从当前补丁的中心点到前一帧中匹配的补丁的路径将成为运动向量。 类似地,我们为所有其他补丁计算运动向量。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import cv2
......@@ -1077,7 +1077,7 @@ if __name__ == '__main__':
这个公式有何特别之处? 如果您注意到了,我们不必进行任何迭代或重新计算任何矩形区域。 等式右侧的所有值均已可用,因为它们是在较早的循环中计算的。 我们直接使用它们来计算此矩形的面积。 我们有效地做的是考虑一个较大的矩形,其中`O``C`代表相对的对角线,然后我们“切出”白色部分以仅留下蓝色区域。 考虑到这一点,让我们看看如何构建一个面部检测器。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import cv2
......@@ -1179,7 +1179,7 @@ cv2.destroyAllWindows()
# 眼睛检测和跟踪
眼睛检测与面部检测相似。 我们将使用眼睛级联文件,而不是使用面部级联文件。 创建一个新的 Python 文件并导入以下软件包:
眼睛检测与面部检测相似。 我们将使用眼睛级联文件,而不是使用面部级联文件。 创建一个新的 Python 文件并导入以下包:
```py
import cv2
......
......@@ -37,7 +37,7 @@
误差是预测输出与实际输出之间的差。 基于误差有多大,神经网络会自行调整并重新训练,直到其更接近可解度。
足够抽象地思考神经网络。 就像我们在本书中一直在做的那样,是时候动手动手,边做边学。 在本章中,我们将使用名为 **NeuroLab** 的库。 NeuroLab 是库,它实现了基本的神经网络算法。 它具有各种参数,可以对其进行配置。 其界面类似于 **MATLAB** 中的**神经网络工具箱****NNT**软件包。 该库是基于 NumPy 软件包的。 [您可以在以下位置找到有关它的更多信息](https://pythonhosted.org/neurolab)
足够抽象地思考神经网络。 就像我们在本书中一直在做的那样,是时候动手动手,边做边学。 在本章中,我们将使用名为 **NeuroLab** 的库。 NeuroLab 是库,它实现了基本的神经网络算法。 它具有各种参数,可以对其进行配置。 其界面类似于 **MATLAB** 中的**神经网络工具箱****NNT**包。 该库是基于 NumPy 包的。 [您可以在以下位置找到有关它的更多信息](https://pythonhosted.org/neurolab)
您可以通过在终端上运行以下命令来安装它:
......@@ -68,7 +68,7 @@ $ pip3 install neurolab
在本章中,我们将看到如何使用这种基本结构进行机器学习。 在后面的章节中,我们将看到更复杂的示例以及神经网络的一些有趣应用。 许多神经网络的核心,无论它们多么复杂,都利用了感知器的简单概念。 这就是为什么对这个主题有一个透彻的了解很重要的原因。 让我们看看如何使用 NeuroLab 构建基于感知器的分类器。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -164,7 +164,7 @@ plt.show()
建立一个带有几个感知器的模型是一个好的开始,它使我们对这个令人兴奋的概念有了基本的了解,但是要真正解决问题,这种简单的模型是不够的。 人脑大约有 850 亿个神经元。 我们不会建立具有这么多节点的神经网络,但是这个数字使您了解解决复杂问题所需的方法。 在建立具有数十亿个节点的模型之前,让我们进行下一步以建立具有单层的网络。 这个单层神经网络由作用于输入数据以产生输出的独立神经元组成。 让我们开始吧。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -276,7 +276,7 @@ for item in data_test:
因此,我们将模型从几个节点增强到了一个单层,但距离 850 亿个节点还差得很远。 我们也不会在本节中谈到这一点,但让我们朝着正确的方向迈出又一步。 人脑不使用单层模型。 一些神经元的输出变成其他神经元的输入,依此类推。 具有这种特征的模型被称为多层神经网络。 这种类型的架构可产生更高的精度,并且使我们能够解决更复杂,更多样化的问题。 让我们看看如何使用 NeuroLab 构建多层神经网络。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -402,9 +402,9 @@ plt.show()
**向量量化**是一种量化技术,其中输入数据由固定数量的代表点表示。 它是`N`维的四舍五入数字。 此技术通常用于多个领域,例如语音/图像识别,语义分析和图像/语音压缩。 最佳向量量化理论的历史可以追溯到 1950 年代的贝尔实验室,在那里进行了研究以使用离散化程序优化信号传输。 向量量化器神经网络的一个优点是它们具有很高的解释性。 让我们看看如何构建向量。
由于当前版本的 NeuroLab(v0.3.5)的某些问题,运行以下代码将引发错误。 幸运的是,有了此修复程序,但其中涉及对 NeuroLab 软件包进行更改。 将 NeuroLab 软件包(`layer_out.np['w'][n][st:i].fill(1.0)`)中`net.py`文件的 **179 行**更改为`layer_out.np['w'][n][int(st):int(i)].fill(1.0))`应该可以解决此问题。 要求读者使用此替代方法,直到在 Neuro Neuro 官方软件包中实现修复为止。
由于当前版本的 NeuroLab(v0.3.5)的某些问题,运行以下代码将引发错误。 幸运的是,有了此修复程序,但其中涉及对 NeuroLab 包进行更改。 将 NeuroLab 包(`layer_out.np['w'][n][st:i].fill(1.0)`)中`net.py`文件的 **179 行**更改为`layer_out.np['w'][n][int(st):int(i)].fill(1.0))`应该可以解决此问题。 要求读者使用此替代方法,直到在 Neuro Neuro 官方包中实现修复为止。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -521,7 +521,7 @@ plt.show()
当我们使用时间序列数据时,我们通常不能使用通用学习模型。 我们需要捕获数据中的时间依赖性,以便可以构建健壮的模型。 让我们看看如何构建它。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -666,7 +666,7 @@ if __name__=='__main__':
您将下载一个名为`letter.data`的文件。 为了方便起见,此文件已在代码包中提供给您。 让我们看看如何加载数据并形象化角色。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import os
......@@ -750,7 +750,7 @@ with open(input_file, 'r') as f:
现在我们已经学习了如何处理这些数据,让我们使用神经网络构建光学字符识别系统。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......
# 20 将卷积神经网络用于深度学习
在本章中,我们将学习深度学习和**卷积神经网络****CNN**)。 在过去的几年中,CNN 取得了很大的发展势头,尤其是在图像识别领域。 我们将讨论 CNN 的架构以及内部使用的层的类型。 我们将看到如何使用一个名为 TensorFlow 的软件包。 我们将构建一个基于感知器的线性回归器。 我们将学习如何使用单层神经网络构建图像分类器。
在本章中,我们将学习深度学习和**卷积神经网络****CNN**)。 在过去的几年中,CNN 取得了很大的发展势头,尤其是在图像识别领域。 我们将讨论 CNN 的架构以及内部使用的层的类型。 我们将看到如何使用一个名为 TensorFlow 的包。 我们将构建一个基于感知器的线性回归器。 我们将学习如何使用单层神经网络构建图像分类器。
然后,我们将使用 CNN 构建图像分类器。 图像分类器有许多应用。 这是一个奇特的名字,但这只是计算机辨别对象是什么的能力。 例如,您可以构建一个分类器来确定某物是热狗还是非热狗。 这是一个轻松的示例,但是图像分类器也可以使用生死攸关的应用。 为嵌入了图像分类软件的无人机拍照,它可以区分平民和敌方战斗人员。 在这种情况下不能犯任何错误。
......@@ -117,9 +117,9 @@ CNN 通常使用以下类型的层:
在建立 CNN 之前,让我们为基础建立一个更基本的模型,并了解如何使用 CNN 进行改进。 在本节中,我们将看到如何使用感知器构建线性回归模型。 在前面的章节中我们已经看到了线性回归,但是本节是关于使用神经网络方法构建线性回归模型的。
我们将在本章中使用 TensorFlow。 这是一个流行的深度学习软件包,已广泛用于构建各种实际系统。 在本节中,我们将熟悉其工作原理。 在继续操作之前,请确保已安装它。 [可以在这里找到安装说明](https://www.tensorflow.org/get_started/os_setup)
我们将在本章中使用 TensorFlow。 这是一个流行的深度学习包,已广泛用于构建各种实际系统。 在本节中,我们将熟悉其工作原理。 在继续操作之前,请确保已安装它。 [可以在这里找到安装说明](https://www.tensorflow.org/get_started/os_setup)
确认已安装后,创建一个新的 Python 文件并导入以下软件包:
确认已安装后,创建一个新的 Python 文件并导入以下包:
```py
import numpy as np
......@@ -312,7 +312,7 @@ for step in range(num_iterations):
让我们看看如何使用 TensorFlow 创建单层神经网络,并使用它来构建图像分类器。 我们将使用 MNIST 图像数据集来构建我们的系统。 它是一个包含手写数字图像的数据集。 我们的目标是建立一个可以正确识别每个图像中数字的分类器。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import tensorflow as tf
......@@ -416,7 +416,7 @@ print('\nAccuracy =', session.run(accuracy, feed_dict = {
上一节部分中的图像分类器效果不佳。 在 MNIST 数据集上获得 92.1% 相对容易。 让我们看看如何使用 CNN 来获得更高的准确性。 我们将使用相同的数据集构建图像分类器,但使用 CNN 而不是单层神经网络。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import argparse
......
......@@ -88,11 +88,11 @@ f(x) = max(0, x)
图 4:ReLU 函数
在 ReLU 变体中,泄漏的 ReLU 实现是最受欢迎的实现之一。 对于正数,它返回与常规 ReLU 相同的值。 但是,它没有返回`0`为负值,而是具有恒定的斜率(小于`1`)。
在 ReLU 变体中,LReLU 实现是最受欢迎的实现之一。 对于正数,它返回与常规 ReLU 相同的值。 但是,它没有返回`0`为负值,而是具有恒定的斜率(小于`1`)。
![Image result for leaky relu function image"](img/B15441_21_05.png)
图 5:泄漏的 ReLU 函数
图 5:LReLU 函数
该斜率是函数用户在设置模型时设置的参数。 斜率由`α`标识。 例如,对于α = 0.3,激活函数为:
......@@ -100,7 +100,7 @@ f(x) = max(0, x)
f(x) = max(0.3 * x, x)
```
泄漏的 ReLU 具有理论上的优势,即在所有值下都受到`x`的影响,因此可以更好地利用所有输入提供的信息。
LReLU 具有理论上的优势,即在所有值下都受到`x`的影响,因此可以更好地利用所有输入提供的信息。
鉴于 ReLU 的特性和优势,它经常是深度学习从业人员和研究人员选择的激活函数。
......
......@@ -83,7 +83,7 @@ $ pip3 install gym
现在您已经安装了它,让我们继续编写一些代码。
创建一个新的 Python 文件并导入以下软件包:
创建一个新的 Python 文件并导入以下包:
```py
import argparse
......@@ -109,7 +109,7 @@ if __name__=='__main__':
input_env = args.input_env
```
创建一个从输入参数字符串到 OpenAI Gym 软件包中指定的环境名称的映射:
创建一个从输入参数字符串到 OpenAI Gym 包中指定的环境名称的映射:
```py
name_map = {'cartpole': 'CartPole-v0',
......@@ -198,7 +198,7 @@ $ python3 run_environment.py --input-env mountaincar
在本节的中,我们将基于第一个例子进行研究。 最初,柱子只是在四处移动。 现在,我们将尝试平衡购物车顶部的电线杆,并确保电线杆保持直立。 准备学习更多吗? 让我们开始吧。
首先,创建一个新的 Python 文件并导入以下软件包:
首先,创建一个新的 Python 文件并导入以下包:
```py
import argparse
......
......@@ -303,7 +303,7 @@ Impala 为 Hadoop 提供了可扩展的并行 SQL 数据库引擎,使开发人
Impala 可以轻松与 Hadoop 集成,并支持 MapReduce,Apache Hive 和 Apache Pig 以及 Hadoop 堆栈中的其他工具所使用的相同文件和数据格式,元数据以及安全和资源管理框架。
分析人员和数据科学家都使用 Impala。 人们通过 SQL,BI 工具以及机器学习库,软件包和工具对 Hadoop 中存储的数据进行分析。 结果是大规模数据处理(通过 MapReduce)。
分析人员和数据科学家都使用 Impala。 人们通过 SQL,BI 工具以及机器学习库,包和工具对 Hadoop 中存储的数据进行分析。 结果是大规模数据处理(通过 MapReduce)。
可以使用相同的数据和元数据在同一系统上启动查询,而不必将数据集迁移到专用系统中,也不必转换为专有文件格式即可执行简单的分析。
......
......@@ -152,7 +152,7 @@ GAN 的架构具有两个基本元素:生成器网络和判别器网络。 每
1. 最初,它接收形状为`28x28`的输入。
2. 输入层采用输入张量,该张量是形状为( `batch_sizex28x28` )的张量,然后将其直接传递到第一隐藏层。
3. 接下来,平坦化层将张量平坦化为 784 维向量,该向量将传递到第一隐藏(密集)层。 第一和第二隐藏层将其修改为 500 维向量。
4. 最后一层是输出层,又是一个密集层,其中一个单元( 神经元)和乙状结肠为激活函数。 它输出一个值为 0 或 1 的值。值为 0 表示提供的图像是假的,而值为 1 表示提供的图像是真实的。
4. 最后一层是输出层,又是一个密集层,其中一个单元( 神经元)和 Sigmoid 为激活函数。 它输出一个值为 0 或 1 的值。值为 0 表示提供的图像是假的,而值为 1 表示提供的图像是真实的。
......@@ -361,7 +361,7 @@ CycleGAN 由朱俊彦,Taesung Park,Phillip Isola 和 Alexei A. Efros 在题
pix2pix 网络是由 Phillip Isola,朱俊彦,周廷辉和 Alexei A. Efros 在他们的论文《使用条件对抗网络的图像到图像翻译》中介绍的,[可通过以下链接获得](https://arxiv.org/abs/1611.07004)。 pix2pix 网络具有与 CycleGAN 网络类似的用例。 它可以将建筑物标签转换为建筑物图片(我们将在 pix2pix 章节中看到一个类似的示例),黑白图像转换为彩色图像,将白天至夜晚的图像,草图转换为照片, 和航拍图像到类似地图的图像。
有关现有所有GAN的列表,请参阅 [GAN Zoo](https://github.com/hindupuravinash/the-gan-zoo),这是 Avinash Hindupur 的文章。
有关现有所有 GAN 的列表,请参阅 [GAN Zoo](https://github.com/hindupuravinash/the-gan-zoo),这是 Avinash Hindupur 的文章。
......@@ -415,7 +415,7 @@ pix2pix 网络是由 Phillip Isola,朱俊彦,周廷辉和 Alexei A. Efros
如果我们使用基于梯度的优化方法训练更大的网络,此问题将变得更加严重。 当我们少量改变参数值时,基于梯度的优化方法通过计算网络输出的变化来优化参数值。 如果参数值的变化导致网络输出的微小变化,则权重变化将非常小,因此网络将停止学习。
当我们使用 Sigmoid 和 Tanh 等激活函数时,这也是一个问题。 乙状结肠激活函数将值限制在 0 到 1 之间,将`x`的大值转换为大约 1,将`x`的小值或负值转换为大约零。 Tanh 激活函数将输入值压缩为 -1 和 1 之间的范围,将大输入值转换为大约 1,将小值转换为大约负 1。当应用反向传播时,我们使用微分链式规则, 有倍增作用。 当我们到达网络的初始层时,梯度(误差)呈指数下降,从而导致梯度消失。
当我们使用 Sigmoid 和 Tanh 等激活函数时,这也是一个问题。 Sigmoid 激活函数将值限制在 0 到 1 之间,将`x`的大值转换为大约 1,将`x`的小值或负值转换为大约零。 Tanh 激活函数将输入值压缩为 -1 和 1 之间的范围,将大输入值转换为大约 1,将小值转换为大约负 1。当应用反向传播时,我们使用微分链式规则, 有倍增作用。 当我们到达网络的初始层时,梯度(误差)呈指数下降,从而导致梯度消失。
为了克服这个问题,我们可以使用激活函数,例如 ReLU,LeakyReLU 和 PReLU。 这些激活函数的梯度在反向传播期间不会饱和,从而导致神经网络的有效训练。 另一种解决方案是使用批量规范化,该规范化将对网络隐藏层的输入规范化。
......
......@@ -116,7 +116,7 @@ Age-cGAN 具有多个训练阶段。 如上一节所述,Age-cGAN 具有四个
![](img/3019472f-d08b-4fa2-9ea1-071be37bc6bd.png)
Age-cGAN的各个阶段,资料来源:[使用条件生成对抗网络进行人脸老化](https://arxiv.org/pdf/1702.01983.pdf)
Age-cGAN 的各个阶段,资料来源:[使用条件生成对抗网络进行人脸老化](https://arxiv.org/pdf/1702.01983.pdf)
我们将在以下部分介绍 Age- cGAN 的所有阶段。
......
......@@ -493,7 +493,7 @@ def get_generator():
* 卷积层分别具有 128、256 和 512 个滤波器。 它们的核大小分别为`(5, 5)``(3, 3)``(3, 3)`
* 在卷积层之后,我们有一个展开层,它将输入平坦化为一维张量。
* 此后,网络具有两个密集层,分别具有 1,024 个神经元和一个神经元。
* 第一密集层具有`LeakyReLU`作为激活函数,而第二层具有乙状结肠作为激活函数。 乙状结肠激活用于二进制分类。 我们正在训练辨别器网络,以区分真实图像还是伪图像。
* 第一密集层具有`LeakyReLU`作为激活函数,而第二层具有 Sigmoid 作为激活函数。 Sigmoid 激活用于二进制分类。 我们正在训练辨别器网络,以区分真实图像还是伪图像。
执行以下步骤来创建判别器网络:
......
......@@ -157,7 +157,7 @@ Pix2pix 是条件 GAN 的变体。 我们已经在第 3 章,“使用条件 GA
生成器网络由这两个网络组成。 基本上,编码器网络是下采样器,而解码器网络是上采样器。 编码器网络将尺寸为`(256, 256, 1)`的图像采样为尺寸为`(1, 1, 1, 512)`的内部表示。 另一方面,解码器网络将尺寸为`(1, 1, 1, 512)`的内部表示采样为尺寸为`(256, 256, 1)`的输出图像。
在“pix2pix 的 Keras实现”中,我们将详细介绍该架构。
在“pix2pix 的 Keras 实现”中,我们将详细介绍该架构。
# 判别器网络
......
......@@ -509,7 +509,7 @@ syn = poisson.rvs(mu, size=2000)
在继续进行更多技术讨论之前,我认为解释 Python 作为本书编程语言的选择会有所帮助。 在过去的十年中,数据科学和机器学习领域的研究呈指数增长,拥有数千篇有价值的论文和数十种完善的工具。 特别是由于 Python 的高效性,美观性和紧凑性,许多研究人员和程序员都选择使用 Python 创建一个完整的科学生态系统,该生态系统已免费发布。
如今,诸如 scikit-learn,SciPy,NumPy,Matplotlib,pandas 之类的软件包代表了数百种可用于生产环境的系统的骨干,并且其使用量还在不断增长。 此外,复杂的深度学习应用(例如 Theano,TensorFlow 和 PyTorch)允许每个 Python 用户创建和训练复杂模型而没有任何速度限制。 实际上,必须注意 Python 不再是脚本语言。 它支持许多特定任务(例如,Web 框架和图形),并且可以与用 C 或 C++ 编写的本机代码进行接口。
如今,诸如 scikit-learn,SciPy,NumPy,Matplotlib,pandas 之类的包代表了数百种可用于生产环境的系统的骨干,并且其使用量还在不断增长。 此外,复杂的深度学习应用(例如 Theano,TensorFlow 和 PyTorch)允许每个 Python 用户创建和训练复杂模型而没有任何速度限制。 实际上,必须注意 Python 不再是脚本语言。 它支持许多特定任务(例如,Web 框架和图形),并且可以与用 C 或 C++ 编写的本机代码进行接口。
由于这些原因,Python 几乎是所有数据科学项目中的最佳选择,并且由于其功能,所有具有不同背景的程序员都可以轻松地学会在短时间内有效地使用它。 也可以使用其他免费解决方案(例如 R,Java 或 Scala),但是,在 R 的情况下,可以完全涵盖统计和数学函数,但缺少构建完整应用所必需的支持框架。 相反,Java 和 Scala 具有完整的可用于生产环境的库生态系统,但是特别是 Java 不像 Python 那样紧凑且易于使用。 而且,对本机代码的支持要复杂得多,并且大多数库都完全依赖 JVM(从而导致性能损失)。
......
......@@ -912,7 +912,7 @@ idx = 0 for i in range(0, 192, square_fragment_size):
原始图像的 RGB 直方图(顶部)和量化的版本(底部)
对于不熟悉直方图的读者,我们可以简单地将其描述为具有X数据集和固定数量的桶。 每个单元分配一个范围(从`min(X)`开始,以`max(X)`结束),并且每个范围`(a, b)`与样本数量相关,从而`a ≤ x < b `。 结果图与生成`X`的实际概率分布的近似成比例。 在我们的情况下,在 x 轴上,每个通道(8 位)的每个像素都有所有可能的值,而 y 轴表示估算的频率(`Nx/像素总数`)。
对于不熟悉直方图的读者,我们可以简单地将其描述为具有 X 数据集和固定数量的桶。 每个单元分配一个范围(从`min(X)`开始,以`max(X)`结束),并且每个范围`(a, b)`与样本数量相关,从而`a ≤ x < b `。 结果图与生成`X`的实际概率分布的近似成比例。 在我们的情况下,在 x 轴上,每个通道(8 位)的每个像素都有所有可能的值,而 y 轴表示估算的频率(`Nx/像素总数`)。
可以看到,量化减少了信息量,但是直方图往往会重现原始信息。 增加量化向量的数量具有减少近似值的效果,从而产生差异较小的直方图。 对该主题的完整分析超出了本书的范围。 但是,我邀请读者使用其他图像和不同数量的量化向量来测试该过程。 也可以将原始图像的(协)方差(或熵)与量化版本进行比较,并找到保留 80% 的方差的阈值。 例如,仅考虑红色通道,并使用频率计数来近似每个值(`0÷255`)的概率,我们可以获得以下信息:
......
......@@ -501,7 +501,7 @@ for eps in np.arange(5.0, 31.0, 1.5):
![](img/6d7e3937-f8a3-42e5-b908-fdead50ad71c.png)
应用于旷工数据集的DBSCAN 的集群不稳定性,作为`ε`的函数
应用于旷工数据集的 DBSCAN 的集群不稳定性,作为`ε`的函数
对于`ε < 7`,该值为空。 这样的结果归因于该算法产生的大量簇和噪声样本。 由于样本分布在不同的区域,因此小的扰动不会改变分配。 对于`7 < ε < 17`,我们观察到一个正斜率达到最大值,大约对应于`ε = 12.5`,然后负斜率达到最终值 0。在这种情况下,聚类变得越来越大,并且包含了越来越多的样本。 但是,当`ε`仍然太小时,*密度可达性链*容易被小扰动破坏(也就是说,样本可以克服球的边界,因此将其排除在群集外)。 结果,在施加加性噪声之后,通常将样本分配给不同的群集。 当`ε = 12.5`时,此现象达到最大值,然后开始变得不太明显。
......
......@@ -1059,7 +1059,7 @@ DBN 是基于 RBM 的堆叠模型。 下图显示了通用结构:
在此示例中,我们要使用 DBN 来查找 MNIST 数据集的低维表示。 由于这些模型的复杂性很容易增加,我们将限制该过程为 500 个随机样本。 该实现基于 [Deep-belief-network 软件包](https://github.com/albertbup/deep-belief-network),该软件包同时支持 NumPy 和 TensorFlow。 在前一种情况下,必须从`dbn`包中导入类(其名称保持不变),而在后一种情况下,必须是`dbn.tensorflow`包。 在此示例中,我们将使用要求较少的 NumPy 版本,但也请读者检查 TensorFlow 版本。
在此示例中,我们要使用 DBN 来查找 MNIST 数据集的低维表示。 由于这些模型的复杂性很容易增加,我们将限制该过程为 500 个随机样本。 该实现基于 [Deep-belief-network ](https://github.com/albertbup/deep-belief-network),该包同时支持 NumPy 和 TensorFlow。 在前一种情况下,必须从`dbn`包中导入类(其名称保持不变),而在后一种情况下,必须是`dbn.tensorflow`包。 在此示例中,我们将使用要求较少的 NumPy 版本,但也请读者检查 TensorFlow 版本。
让我们从加载和规范化数据集开始,如下所示:
......@@ -1084,9 +1084,9 @@ Y_train = Y_train[0:nb_samples]
现在,我们可以使用以下结构实例化`UnsupervisedDBN`类:
1. 64 个输入神经元(从数据集中隐式检测到)
2. 32 个乙状结肠神经元
3. 32 个乙状结肠神经元
4. 16 个乙状神经元
2. 32 个 Sigmoid 神经元
3. 32 个 Sigmoid 神经元
4. 16 个 Sigmoid 神经元
因此,最后一个表示形式由 16 个值(原始尺寸的四分之一)组成。 我们将`η = 0.025`的学习速率设置为每批 16 个样本(当然,我们邀请您检查其他配置,以最大程度地减少重构误差)。 以下代码段初始化并训练模型:
......
......@@ -194,11 +194,11 @@ nb_iterations = int(nb_samples / batch_size)
* 具有 1,024 个`4×4`过滤器的 2D 卷积,步幅为`(1, 1)`,有效填充和线性输出
* 批量规范化和 LReLU 激活(当输入值为负时,性能更高;实际上,当`x < 0`时,标准 ReLU 的梯度为零,而 LReLU 的常数较小) 允许稍微修改的渐变)
* 带有`(2, 2)`步幅,相同填充和线性输出的 512 个`4×4`滤波器的 2D 卷积
* 批量规范化和泄漏的 ReLU 激活
* 批量规范化和 LReLU 激活
* 256 个`4×4`滤波器的 2D 卷积,步幅为`(2, 2)`,相同填充,以及线性输出
* 批量规范化和泄漏的 ReLU 激活
* 批量规范化和 LReLU 激活
* 具有 128 个`4×4`过滤器的 2D 卷积,步幅为`(2, 2)`,相同填充,以及线性输出
* 批量规范化和泄漏的 ReLU 激活
* 批量规范化和 LReLU 激活
* 具有 1 个`4×4`滤波器的 2D 卷积,步幅为`(2, 2)`,相同填充,以及双曲正切输出
以下代码段显示了生成器的代码:
......@@ -252,13 +252,13 @@ def generator(z, is_training=True):
判别器的 DAG 基于以下对称结构:
* 具有`(2, 2)`步幅的 128`4×4`个滤波器的 2D 卷积,相同填充,以及泄漏的 ReLU 输出
* 具有`(2, 2)`步幅的 128`4×4`个滤波器的 2D 卷积,相同填充,以及 LReLU 输出
* 256 个`4×4`滤波器的 2D 卷积,步幅为`(2, 2)`,相同填充,以及线性输出
* 批量规范化和泄漏的 ReLU 激活
* 批量规范化和 LReLU 激活
* 带有 512 个`4×4`滤波器的 2D 卷积,步幅为`(2, 2)`,相同填充,以及线性输出
* 批量规范化和泄漏的 ReLU 激活
* 批量规范化和 LReLU 激活
* 具有 1,024`4×4`滤波器的 2D 卷积,步幅为`(2, 2)`,相同填充,以及线性输出
* 批量规范化和泄漏的 ReLU 激活
* 批量规范化和 LReLU 激活
* 具有 1 个`4×4`过滤器的 2D 卷积,步幅为`(2, 2)`,有效填充,以及线性输出(预期输出为 sigmoid,可以表示一个概率,但是我们将直接在损失函数内部执行此变换)
判别器的代码为,如下所示:
......@@ -505,11 +505,11 @@ height = X_train.shape[2]
* 具有 1,024 个`4×4`滤波器的 2D 卷积,步幅为`(1, 1)`,有效填充,以及线性输出
* 批量规范化和 LReLU 激活
* 带有 512 个`4×4`滤波器的 2D 卷积,步幅为`(2, 2)`,相同填充,以及线性输出
* 批量规范化和泄漏的 ReLU 激活
* 批量规范化和 LReLU 激活
* 256 个`4×4`滤波器的 2D 卷积,步幅为`(2, 2)`,相同填充,以及线性输出
* 批量规范化和泄漏的 ReLU 激活
* 批量规范化和 LReLU 激活
* 具有 128 个`4×4`滤波器的 2D 卷积,步幅为`(2, 2)`,相同填充,以及线性输出
* 批量规范化和泄漏的 ReLU 激活
* 批量规范化和 LReLU 激活
* 具有 1 个`4×4`滤波器的 2D 卷积,步幅为`(2, 2)`,相同填充,以及双曲正切输出
该代码显示在以下代码片段中:
......@@ -561,13 +561,13 @@ def generator(z, is_training=True):
评论者的 DAG 基于以下几组:
* 具有`(2, 2)`步幅的 128`4×4`个滤波器的 2D 卷积,相同填充,以及泄漏的 ReLU 输出
* 具有`(2, 2)`步幅的 128`4×4`个滤波器的 2D 卷积,相同填充,以及 LReLU 输出
* 256 个`4×4`滤波器的 2D 卷积,步幅为`(2, 2)`,相同填充,以及线性输出
* 批量规范化和泄漏的 ReLU 激活
* 批量规范化和 LReLU 激活
* 带有 512 个`4×4`滤波器的 2D 卷积,步幅为`(2, 2)`,相同填充,以及线性输出
* 批量规范化和泄漏的 ReLU 激活
* 批量规范化和 LReLU 激活
* 具有 1,024`4×4`滤波器的 2D 卷积,步幅为`(2, 2)`,相同填充,以及线性输出
* 批量规范化和泄漏的 ReLU 激活
* 批量规范化和 LReLU 激活
* 具有 1 个`4×4`过滤器的 2D 卷积,步幅为`(2, 2)`,有效填充和线性输出
相应的代码块为,如下所示:
......
......@@ -27,13 +27,13 @@
TensorFlow 是领先的机器智能开源框架。 当 Google 在 2015 年 11 月将 TensorFlow 作为一个开源项目发布时,已经有其他一些类似的深度学习开源框架:Caffe,Torch 和 Theano。 在 5 月 10 日的 Google I/O 2018 上,GitHub 上的 TensorFlow 已达到 99000 星,在 4 个月内增加了 14k 星,而 Caffe 仅增加了 2k 至 24k 星。 两年后,它已经成为最流行的开源框架,用于训练和部署深度学习模型(它对传统机器学习也有很好的支持)。 截至 2018 年 1 月,TensorFlow 在 GitHub 上拥有[近 8.5 万颗星](https://github.com/tensorflow/tensorflow),而其他三个领先的开源深度学习框架 [Caffe](https://github.com/BVLC/caffe)[CNTK](https://github.com/Microsoft/CNTK)[Mxnet](https://github.com/apache/incubator-mxnet) 分别拥有 22k,13k 和 12k 颗星。
如果您对机器学习,深度学习,机器智能和人工智能(AI)的流行语有些困惑,这里有个简短的摘要:机器智能和 AI 确实是同一回事。 机器学习是 AI 的一个领域,也是最受欢迎的领域; 深度学习是机器学习的一种特殊类型,也是解决诸如计算机视觉,语音识别和合成以及自然语言处理之类的复杂问题的现代且最有效的方法。 因此,在本书中,当我们说 AI 时,我们主要是指深度学习,这是将AI从漫长的冬天带到夏天的救星。 有关 AI 冬季和深度学习的更多信息,您可以查看[这里](https://en.wikipedia.org/wiki/AI_winter)[这里](http://www.deeplearningbook.org)
如果您对机器学习,深度学习,机器智能和人工智能(AI)的流行语有些困惑,这里有个简短的摘要:机器智能和 AI 确实是同一回事。 机器学习是 AI 的一个领域,也是最受欢迎的领域; 深度学习是机器学习的一种特殊类型,也是解决诸如计算机视觉,语音识别和合成以及自然语言处理之类的复杂问题的现代且最有效的方法。 因此,在本书中,当我们说 AI 时,我们主要是指深度学习,这是将 AI 从漫长的冬天带到夏天的救星。 有关 AI 冬季和深度学习的更多信息,您可以查看[这里](https://en.wikipedia.org/wiki/AI_winter)[这里](http://www.deeplearningbook.org)
我们假设您已经对 TensorFlow 有了基本的了解,但是如果您还没有,请查看[入门](https://www.tensorflow.org/get_started)[教程](https://www.tensorflow.org/tutorials)部分或 [Awesome TensorFlow 教程](https://github.com/jtoy/awesome-tensorflow)。 关于该主题的两本好书是《Python 机器学习:Python , scikit-learn 和 TensorFlow 机器学习和深度学习》和《使用 Scikit-Learn 和 TensorFlow 动手进行机器学习》。
TensorFlow 可以安装在 MacOS,Ubuntu 或 Windows 上。 我们将介绍在 MacOS X El Capitan(10.11.6),macOS Sierra(10.12.6)和 Ubuntu 16.04 上从源代码安装 TensorFlow 1.4 的步骤。 如果您使用其他操作系统或版本,则可以参考 [TensorFlow 安装文档](https://www.tensorflow.org/install)以获取更多信息。 当您阅读本书时,可能会出现更新的 TensorFlow 版本。 尽管您仍然应该能够使用较新版本运行本书中的代码,但这并不能保证,因此我们在 Mac 和 Ubuntu 上使用 TensorFlow 1.4 发行源代码来设置 TensorFlow; 这样,您可以轻松地测试运行并与书中的应用一起玩。
自从我们于 2017 年 12 月撰写以上段落以来,TensorFlow 已有四个新的正式版本(1.5、1.6、1.71.8),以及截至 2018 年 5 月的新版本 Xcode(9.3),您可以在[以下位置](https://github.com/tensorflow/tensorflow/releases)下载, 或在 TensorFlow [源代码仓库](https://github.com/tensorflow/tensorflow)。 TensorFlow 的较新版本(例如 1.8)默认情况下支持 NVIDIA CUDA 和 cuDNN 的较新版本(有关详细信息,请参阅“在 Ubuntu 上设置基于 GPU 的 TensorFlow”部分),并且最好遵循官方的 TensorFlow 文档来安装具有 GPU 支持的最新 TensorFlow 版本。 在本章及以下各章中,我们将以特定的 TensorFlow 版本为例,但将对所有 iOS,Android 和 Python 代码进行测试,并在需要时针对其中的最新 TensorFlow,Xcode 和 Android Studio 版本进行更新。 本书的源代码仓库位于[这里](https://github.com/jeffxtang/mobiletfbook)
自从我们于 2017 年 12 月撰写以上段落以来,TensorFlow 已有四个新的正式版本(1.5、1.6、1.71.8),以及截至 2018 年 5 月的新版本 Xcode(9.3),您可以在[以下位置](https://github.com/tensorflow/tensorflow/releases)下载, 或在 TensorFlow [源代码仓库](https://github.com/tensorflow/tensorflow)。 TensorFlow 的较新版本(例如 1.8)默认情况下支持 NVIDIA CUDA 和 cuDNN 的较新版本(有关详细信息,请参阅“在 Ubuntu 上设置基于 GPU 的 TensorFlow”部分),并且最好遵循官方的 TensorFlow 文档来安装具有 GPU 支持的最新 TensorFlow 版本。 在本章及以下各章中,我们将以特定的 TensorFlow 版本为例,但将对所有 iOS,Android 和 Python 代码进行测试,并在需要时针对其中的最新 TensorFlow,Xcode 和 Android Studio 版本进行更新。 本书的源代码仓库位于[这里](https://github.com/jeffxtang/mobiletfbook)
总体而言,我们将在 Mac 上使用 TensorFlow 开发 iOS 和 Android TensorFlow 应用,并在 Ubuntu 上使用 TensorFlow 训练应用中使用的深度学习模型。
......@@ -54,7 +54,7 @@ TensorFlow 可以安装在 MacOS,Ubuntu 或 Windows 上。 我们将介绍在
3. 确保已安装 Xcode 8.2.1 或更高版本(否则,请先阅读“设置 Xcode”部分)
4. 打开一个新的终端窗口,然后单击`cd tensorflow-1.4.0`
5. 运行`xcode-select --install`以安装命令行工具
6. 运行以下命令以安装构建 TensorFlow 所需的其他工具和软件包:
6. 运行以下命令以安装构建 TensorFlow 所需的其他工具和包:
```py
sudo pip install six numpy wheel
......@@ -73,7 +73,7 @@ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
```
8. 安装 TensorFlow 1.4.0 CPU 软件包:
8. 安装 TensorFlow 1.4.0 CPU 包:
```py
sudo pip install --upgrade /tmp/tensorflow_pkg/tensorflow-1.4.0-cp27-cp27m-macosx_10_12_intel.whl
......@@ -95,7 +95,7 @@ sudo pip install --upgrade /tmp/tensorflow_pkg/tensorflow-1.4.0-cp27-cp27m-macos
为了训练本书中应用中部署的模型,我们使用 NVIDIA GTX 1070,您可以在 Amazon 或 eBay 上以大约 400 美元的价格购买。 蒂姆·戴特默斯(Tim Dettmers)有一个不错的博客,其中介绍了[用于深度学习的 GPU](http://timdettmers.com/2017/04/09/which-gpu-for-deep-learning/)。 在获得这样的 GPU 并将其安装在 Ubuntu 系统上之后,以及在安装启用 GPU 的 TensorFlow 之前,您需要安装 NVIDIA CUDA 8.0(或 9.0)和 cuDNN(CUDA-DeepNeuralNetwork)6.0 (或 7.0),两者均受 TensorFlow 1.4 支持。
使用 TensorFlow 设置自己的 GPU 驱动的 Ubuntu 的另一种方法是[在支持 GPU 的云服务(例如Google Cloud Platform 的 Cloud ML Engine)中使用 TensorFlow](https://cloud.google.com/ml-engine/docs/using-gpus)。 每个选项都有优点和缺点。 云服务通常是基于时间的计费。 如果您的目标是训练或重新训练要在移动设备上部署的模型,这意味着模型并不复杂,并且如果您计划长时间进行机器学习训练,那么拥有自己的 GPU 成本效益更高并且令人满意。
使用 TensorFlow 设置自己的 GPU 驱动的 Ubuntu 的另一种方法是[在支持 GPU 的云服务(例如 Google Cloud Platform 的 Cloud ML Engine)中使用 TensorFlow](https://cloud.google.com/ml-engine/docs/using-gpus)。 每个选项都有优点和缺点。 云服务通常是基于时间的计费。 如果您的目标是训练或重新训练要在移动设备上部署的模型,这意味着模型并不复杂,并且如果您计划长时间进行机器学习训练,那么拥有自己的 GPU 成本效益更高并且令人满意。
请按照以下步骤在 Ubuntu 16.04 上安装 CUDA 8.0 和 cuDNN 6.0(您应该能够以类似的方式下载并安装 CUDA 9.0 和 cuDNN 7.0):
......@@ -140,7 +140,7 @@ sudo cp ~/Downloads/cuda/include/cudnn.h /usr/local/cuda/include
1.[GitHub 上的 TensorFlow 发布页面](https://github.com/tensorflow/tensorflow/releases)下载 TensorFlow 1.4.0 源代码(`zip``tar.gz`
2. 解压缩下载的文件并将文件夹拖到主目录
3.[这里](https://github.com/bazelbuild/bazel/releases)下载 bazel 安装程序
4. 打开一个新的终端窗口,然后运行以下命令以安装构建 TensorFlow 所需的工具和软件包:
4. 打开一个新的终端窗口,然后运行以下命令以安装构建 TensorFlow 所需的工具和包:
```py
sudo pip install six numpy wheel
......@@ -158,7 +158,7 @@ bazel build --config=opt --config=cuda //tensorflow/tools/pip_package:build_pip_
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
```
6. 安装 TensorFlow 1.4.0 GPU 软件包:
6. 安装 TensorFlow 1.4.0 GPU 包:
```py
sudo pip install --upgrade /tmp/tensorflow_pkg/tensorflow-1.4.0-cp27-cp27mu-linux_x86_64.whl
......
......@@ -820,7 +820,7 @@ self.present(alert, animated: true, completion: nil)
1. 如果您有现有的 Android 应用,请跳过此步骤。 否则,在 Android Studio 中,选择“文件 | 新增 | 新项目...”并接受所有默认设置,然后单击完成。
2. 打开`build.gradle``Module: app`)文件,并在依赖项`{...};`内部和末尾添加编译`'org.tensorflow:tensorflow-android:+'`
3. 生成`gradle`文件,您将在`app`目录的位置`app/build/intermediates/transforms/mergeJniLibs/debug/0/lib`的子文件夹内看到`libtensorflow_inference.so`,这是 Java 代码与之对话的 TensorFlow 本机库。
4. 如果这是一个新项目,则可以通过首先切换到软件包,然后右键单击该应用并选择“新建 | 文件夹 | `assets`文件夹”来创建`assets`文件夹。 ,如以下屏幕截图所示,然后从软件包切换回 Android:
4. 如果这是一个新项目,则可以通过首先切换到包,然后右键单击该应用并选择“新建 | 文件夹 | `assets`文件夹”来创建`assets`文件夹。 ,如以下屏幕截图所示,然后从包切换回 Android:
![](img/6cf6b889-8ecb-4837-9087-19b34d6e68ed.png)
......
......@@ -29,7 +29,7 @@
自从提出 RCNN 以来,性能更好的对象检测算法纷至沓来:快速 RCNN,更快的 RCNN,YOLO(您只看一次),SSD(单发多框检测器)和 YOLO v2。
2014 年,Andrej Karpathy 对 RCNN 作了很好的介绍,[“玩转 RCNN,先进的物体检测器”](https://cs.stanford.edu/people/karpathy/rcnn)。 贾斯汀·约翰逊(Justin Johnson)在斯坦福大学CS231n课程中提供了一个很好的视频讲座[“空间定位和检测”](https://github.com/weiliu89/caffe/tree/ssd),内容涉及物体检测,其中包括 RCNN,Fast RCNN,Faster RCNN 和 YOLO 的详细信息。 YOLO2 网站是[这里](https://pjreddie.com/darknet/yolo)
2014 年,Andrej Karpathy 对 RCNN 作了很好的介绍,[“玩转 RCNN,先进的物体检测器”](https://cs.stanford.edu/people/karpathy/rcnn)。 贾斯汀·约翰逊(Justin Johnson)在斯坦福大学 CS231n 课程中提供了一个很好的视频讲座[“空间定位和检测”](https://github.com/weiliu89/caffe/tree/ssd),内容涉及物体检测,其中包括 RCNN,Fast RCNN,Faster RCNN 和 YOLO 的详细信息。 YOLO2 网站是[这里](https://pjreddie.com/darknet/yolo)
快速 RCNN 通过首先在整个输入图像上而不是数千个建议的区域上应用 CNN,然后处理区域建议,从而显着改善了训练过程和推理时间(10 小时的训练和 2.x 秒的推理)。 更快的 RCNN 通过使用区域建议网络进一步将推理速度提高到了实时(0.2 秒),因此在训练后,不再需要耗时的区域建议过程。
......@@ -462,7 +462,7 @@ tensorflow/contrib/makefile/gen/lib/libtensorflow-core.a
前两个库处理我们之前讨论的 protobuf 数据。 最后一个库是 iOS 通用静态库。
如果您运行该应用,请完成以下步骤,并在Xcode控制台中遇到错误,`Invalid argument: No OpKernel was registered to support Op 'Less' with these attrs. Registered devices: [CPU], Registered kernels: device='CPU'; T in [DT_FLOAT]`,您需要在此处执行步骤 2 之前更改`tensorflow/contrib/makefile/Makefile`文件(请参阅第 7 章,“使用 CNN 和 LSTM 识别绘图”中的“为 iOS 构建自定义 TensorFlow 库”一节)。 使用新版本的 TensorFlow 时可能看不到错误。
如果您运行该应用,请完成以下步骤,并在 Xcode 控制台中遇到错误,`Invalid argument: No OpKernel was registered to support Op 'Less' with these attrs. Registered devices: [CPU], Registered kernels: device='CPU'; T in [DT_FLOAT]`,您需要在此处执行步骤 2 之前更改`tensorflow/contrib/makefile/Makefile`文件(请参阅第 7 章,“使用 CNN 和 LSTM 识别绘图”中的“为 iOS 构建自定义 TensorFlow 库”一节)。 使用新版本的 TensorFlow 时可能看不到错误。
......
......@@ -30,7 +30,7 @@
现代语音识别引擎几乎可以理解嘈杂环境下人们的任何说话,并且基于端到端深度学习,尤其是另一种更适合自然语言处理的深度神经网络,称为**循环神经网络****RNN**)。 与传统的基于 HMM 的语音识别不同,传统的基于 HMM 的语音识别需要人的专业知识来构建和微调手工设计的功能以及声学和语言模型,而基于 RNN 的端到端语音识别系统则将音频输入直接转换为文本,而无需将音频输入转换为语音表示以进行进一步处理。
RNN 允许我们处理输入和/或输出的序列,因为根据设计,网络可以存储输入序列中的先前项目或可以生成输出序列。 这使RNN更适用于语音识别(输入是用户说出的单词序列),图像标题(输出是由一系列单词组成的自然语言句子),文本生成和时间序列预测 。 如果您不熟悉 RNN,则一定要查看 Andrey Karpathy 的博客,[循环神经网络的不合理有效性](http://karpathy.github.io/2015/05/21/rnn-effectiveness)。 在本书的后面,我们还将介绍一些详细的 RNN 模型。
RNN 允许我们处理输入和/或输出的序列,因为根据设计,网络可以存储输入序列中的先前项目或可以生成输出序列。 这使 RNN 更适用于语音识别(输入是用户说出的单词序列),图像标题(输出是由一系列单词组成的自然语言句子),文本生成和时间序列预测 。 如果您不熟悉 RNN,则一定要查看 Andrey Karpathy 的博客,[循环神经网络的不合理有效性](http://karpathy.github.io/2015/05/21/rnn-effectiveness)。 在本书的后面,我们还将介绍一些详细的 RNN 模型。
[关于 RNN 端到端语音识别的第一篇研究论文发表于 2014 年](http://proceedings.mlr.press/v32/graves14.pdf),使用的是**连接主义的时间分类****CTC**)层。 2014 年下半年,百度发布了 [Deep Speech](https://arxiv.org/abs/1412.5567),这是第一个使用基于 CTC 的端到端 RNN 构建但拥有庞大数据集的商业系统之一 ,并在嘈杂的环境中实现了比传统 ASR 系统更低的错误率。 如果您有兴趣,可以查看[深度语音的 TensorFlow 实现](https://github.com/mozilla/DeepSpeech),但是由于此类基于 CTC 的系统存在问题,生成的模型需要太多的资源才能在手机上运行。 在部署期间,它需要一个大型语言模型来纠正部分由 RNN 的性质引起的生成的文本错误(如果您想知道为什么,请阅读前面链接的 RNN 博客以获取一些见识)。
......@@ -59,7 +59,7 @@ RNN 允许我们处理输入和/或输出的序列,因为根据设计,网络
在移动应用中要训练和使用的模型基于纸质卷积神经网络,[用于小尺寸关键词发现](http://www.isca-speech.org/archive/interspeech_2015/papers/i15_1478.pdf),这与大多数其他基于 RNN 的大规模语音识别模型不同。 基于 CNN 的语音识别模型是可能的,但很有趣,因为对于简单的语音命令识别,我们可以在短时间内将音频信号转换为图像,或更准确地说,将频谱图转换为频率窗口期间音频信号的分布(有关使用`wav_to_spectrogram`脚本生成的示例频谱图图像,请参见本节开头的 TensorFlow 教程链接)。 换句话说,我们可以将音频信号从其原始时域表示转换为频域表示。 进行此转换的最佳算法是**离散傅立叶变换****DFT**),**快速傅立叶变换****FFT**)只是一种有效的选择 DFT 实现的算法。
作为移动开发人员,您可能不需要了解 DFT 和 FFT。 但是,您最好了解所有这些模型训练在移动应用中使用时是如何工作的,因为我们知道我们将要介绍的 TensorFlow 简单语音命令模型训练的幕后花絮,这是 FFT 的使用,前十大模型之一。当然,除其他事项外,20 世纪的算法使基于 CNN 的语音命令识别模型训练成为可能。 有关DFT的有趣且直观的教程,您可以阅读[以下文章](http://practicalcryptography.com/miscellaneous/machine-learning/intuitive-guide-discrete-fourier-transform)
作为移动开发人员,您可能不需要了解 DFT 和 FFT。 但是,您最好了解所有这些模型训练在移动应用中使用时是如何工作的,因为我们知道我们将要介绍的 TensorFlow 简单语音命令模型训练的幕后花絮,这是 FFT 的使用,前十大模型之一。当然,除其他事项外,20 世纪的算法使基于 CNN 的语音命令识别模型训练成为可能。 有关 DFT 的有趣且直观的教程,您可以阅读[以下文章](http://practicalcryptography.com/miscellaneous/machine-learning/intuitive-guide-discrete-fourier-transform)
现在,让我们执行以下步骤来训练简单语音命令识别模型:
......@@ -418,7 +418,7 @@ runOnUiThread(new Runnable() {
如果您已经阅读了前三章中的 iOS 应用,那么您可能更喜欢使用手动构建的 TensorFlow iOS 库而不是 TensorFlow 实验窗格,就像使用手动库方法一样,您可以更好地控制可以添加哪些 TensorFlow 操作来使您的模型满意,这也是我们决定专注于 TensorFlow Mobile 而不是第 1 章,“移动 TensorFlow”的 TensorFlow Lite 的原因之一。
因此,尽管您可以在阅读本书时尝试使用 TensorFlow Pod,以查看Pod是否已更新以支持模型中使用的所有操作,但从现在开始,我们将始终使用手动构建的 TensorFlow 库( 请参见 iOS 应用中第 3 章,“检测对象及其位置”的“在 iOS 中使用对象检测模型的”部分的步骤 1 和 2)。
因此,尽管您可以在阅读本书时尝试使用 TensorFlow Pod,以查看 Pod 是否已更新以支持模型中使用的所有操作,但从现在开始,我们将始终使用手动构建的 TensorFlow 库( 请参见 iOS 应用中第 3 章,“检测对象及其位置”的“在 iOS 中使用对象检测模型的”部分的步骤 1 和 2)。
......
......@@ -687,7 +687,7 @@ return sentence;
![](img/dd9bd09b-1b39-47ff-8a8f-f7f180faff3c.png)
图 6.6:运行`Image2Text` iOS应用并选择模型
图 6.6:运行`Image2Text` iOS 应用并选择模型
在 iOS 模拟器上,运行非映射模型需要 10 秒钟以上,运行映射模型则需要 5 秒钟以上。 在 iPhone 6 上,运行贴图模型还需要大约 5 秒钟,但由于模型文件和内存压力较大,运行非贴图模型时会崩溃。
......
......@@ -36,7 +36,7 @@
LSTM 只是解决 RNN 已知梯度消失问题的一种 RNN,我们在第 6 章,“用自然语言描述图像”中引入了 LSTM。 基本上,在训练 RNN 模型的过程中,,如果到 RNN 的输入序列的时间步太长,则使用反向传播更新较早时间步的网络权重可能会得到 0 的梯度值, 导致没有学习发生。 例如,当我们使用 50 天的价格作为输入,并且如果使用 50 天甚至 40 天的时间步长变得太长,则常规 RNN 将是不可训练的。 LSTM 通过添加一个长期状态来解决此问题,该状态决定可以丢弃哪些信息以及需要在许多时间步骤中存储和携带哪些信息。
可以很好地解决梯度消失问题的另一种RNN被称为**门控循环单元****GRU**),它稍微简化了标准 LSTM 模型,并且越来越受欢迎。 TensorFlow 和 Keras API 均支持基本的 RNN 和 LSTM/GRU 模型。 在接下来的两部分中,您将看到使用 RNN 和标准 LSTM 的具体 TensorFlow 和 Keras API,并且可以在代码中简单地将`LSTM`替换为`GRU`,以将使用 GRU 模型的结果与 RNN 和标准 LSTM 模型比较。
可以很好地解决梯度消失问题的另一种 RNN 被称为**门控循环单元****GRU**),它稍微简化了标准 LSTM 模型,并且越来越受欢迎。 TensorFlow 和 Keras API 均支持基本的 RNN 和 LSTM/GRU 模型。 在接下来的两部分中,您将看到使用 RNN 和标准 LSTM 的具体 TensorFlow 和 Keras API,并且可以在代码中简单地将`LSTM`替换为`GRU`,以将使用 GRU 模型的结果与 RNN 和标准 LSTM 模型比较。
三种常用技术可以使 LSTM 模型表现更好:
......@@ -319,7 +319,7 @@ pip install --upgrade https://storage.googleapis.com/tensorflow/mac/cpu/tensorfl
pip install keras
```
如果您的操作系统不是 Mac 或计算机具有 GPU,则您需要用正确的 URL 替换 TensorFlow Python 软件包 URL,您可以在[这个页面](https://www.tensorflow.org/install)上找到它。
如果您的操作系统不是 Mac 或计算机具有 GPU,则您需要用正确的 URL 替换 TensorFlow Python 包 URL,您可以在[这个页面](https://www.tensorflow.org/install)上找到它。
......
......@@ -39,7 +39,7 @@ AlphaZero 算法包含三个主要组件:
如果深层神经网络使用自我玩法强化学习所学习的策略是理想的,则我们可能无需让程序在游戏过程中执行任何 MCTS,而程序总是可以最大可能地选择移动。 但是在诸如象棋或围棋的复杂游戏中,无法生成完美的策略,因此 MCTS 必须与训练有素的深度网络一起工作,以指导针对每种游戏状态的最佳可能动作的搜索。
如果您不熟悉强化学习或 MCTS,则在互联网上有很多关于强化学习或 MCTS 的信息。 考虑查看 Richard Sutton 和 Andrew Barto 的经典著作《强化学习:简介》,该书可在[以下网站](http://incompleteideas.net/book/the-book-2nd.html)上公开获得。 您还可以在YouTube上观看 DeepMind 的 AlphaGo 的技术负责人 David Silver 的强化学习课程视频(搜索“强化学习 David Silver”)。 一个有趣且有用的强化学习工具包是 [OpenAI Gym](https://gym.openai.com)。 在本书的最后一章中,我们将更深入地学习强化学习和 OpenAI Gym。 对于 MCTS,请查看其[维基页面](https://en.wikipedia.org/wiki/Monte_Carlo_tree_search),以及[此博客](http://tim.hibal.org/blog/alpha-zero-how-and-why-it-works)
如果您不熟悉强化学习或 MCTS,则在互联网上有很多关于强化学习或 MCTS 的信息。 考虑查看 Richard Sutton 和 Andrew Barto 的经典著作《强化学习:简介》,该书可在[以下网站](http://incompleteideas.net/book/the-book-2nd.html)上公开获得。 您还可以在 YouTube 上观看 DeepMind 的 AlphaGo 的技术负责人 David Silver 的强化学习课程视频(搜索“强化学习 David Silver”)。 一个有趣且有用的强化学习工具包是 [OpenAI Gym](https://gym.openai.com)。 在本书的最后一章中,我们将更深入地学习强化学习和 OpenAI Gym。 对于 MCTS,请查看其[维基页面](https://en.wikipedia.org/wiki/Monte_Carlo_tree_search),以及[此博客](http://tim.hibal.org/blog/alpha-zero-how-and-why-it-works)
在下一节中,我们将研究以 TensorFlow 为后端的 Keras 实现 AlphaZero 算法,其目标是使用该算法构建和训练模型以玩 Connect4。您将看到模型架构是什么样,以及构建模型的 Keras 关键代码。
......@@ -91,7 +91,7 @@ pip install keras
您也可以在前面的`pip install`命令中尝试 TensorFlow 1.5-1.8 下载 URL。
现在,先按`cd DeepReinforcementLearning`打开`run.ipynb`,然后按`jupyter notebook`打开-根据您的环境,如果发现任何错误,则需要安装缺少的 Python 软件包。 在浏览器上,打开`http://localhost:8888/notebooks/run.ipynb`,然后运行笔记本中的第一个代码块以加载所有必需的核心库,并运行第二个代码块以开始训练—该代码被编写为永远训练,因此经过数小时的训练后,您可能要取消`jupyter notebook`命令。 在较旧的 Mac 上,要花一个小时才能看到在以下目录中创建的模型的第一个版本(较新的版本,例如`version0004.h5`,其权重比旧版本中的权重要微调,例如 `version0001.h5`):
现在,先按`cd DeepReinforcementLearning`打开`run.ipynb`,然后按`jupyter notebook`打开-根据您的环境,如果发现任何错误,则需要安装缺少的 Python 包。 在浏览器上,打开`http://localhost:8888/notebooks/run.ipynb`,然后运行笔记本中的第一个代码块以加载所有必需的核心库,并运行第二个代码块以开始训练—该代码被编写为永远训练,因此经过数小时的训练后,您可能要取消`jupyter notebook`命令。 在较旧的 Mac 上,要花一个小时才能看到在以下目录中创建的模型的第一个版本(较新的版本,例如`version0004.h5`,其权重比旧版本中的权重要微调,例如 `version0001.h5`):
```py
(tf_keras) MacBook-Air:DeepReinforcementLearning jeffmbair$ ls -lt run/models
......@@ -360,7 +360,7 @@ python tensorflow/python/tools/freeze_graph.py \
对于新冻结的,可选的经过转换和映射的模型,您始终可以将其与 TensorFlow Pod一起尝试,以查看是否有幸能够以简单的方式使用它。 在我们的案例中,当使用 TensorFlow Pod 加载它时,我们生成的`alphazero19.pb` 模型会导致以下错误:
对于新冻结的,可选的经过转换和映射的模型,您始终可以将其与 TensorFlow Pod 一起尝试,以查看是否有幸能够以简单的方式使用它。 在我们的案例中,当使用 TensorFlow Pod 加载它时,我们生成的`alphazero19.pb` 模型会导致以下错误:
```py
Couldn't load model: Invalid argument: No OpKernel was registered to support Op 'Switch' with these attrs. Registered devices: [CPU], Registered kernels:
......
......@@ -29,7 +29,7 @@
1. 使用 TensorFlow 或 Keras 以 TensorFlow 作为后端来构建和训练(或重新训练)TensorFlow 模型,例如我们在前几章中训练的模型。
您还可以选择一个预先构建的 TensorFlow Lite 模型,例如可从以下位置获得的 [MobileNet 模型](https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md),我们在第 2 章,《使用转移学习对图像进行分类》中将其用于再训练。 您可以在此处下载的每个MobileNet 模型`tgz`文件都包含转换后的 TensorFlow Lite 模型。 例如,`MobileNet_v1_1.0_224.tgz`文件包含一个`mobilenet_v1_1.0_224.tflite`文件,您可以直接在移动设备上使用它。 如果使用这样的预构建 TensorFlow Lite 模型,则可以跳过步骤 2 和 3。
您还可以选择一个预先构建的 TensorFlow Lite 模型,例如可从以下位置获得的 [MobileNet 模型](https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md),我们在第 2 章,《使用转移学习对图像进行分类》中将其用于再训练。 您可以在此处下载的每个 MobileNet 模型`tgz`文件都包含转换后的 TensorFlow Lite 模型。 例如,`MobileNet_v1_1.0_224.tgz`文件包含一个`mobilenet_v1_1.0_224.tflite`文件,您可以直接在移动设备上使用它。 如果使用这样的预构建 TensorFlow Lite 模型,则可以跳过步骤 2 和 3。
2. 构建 TensorFlow Lite 转换器工具。 如果您从[这里](https://github.com/tensorflow/tensorflow/releases)下载 TensorFlow 1.5 或 1.6 版本,则可以从 TensorFlow 源根目录在终端上运行`bazel build tensorflow/contrib/lite/toco:toco`。 如果您使用更高版本或获取最新的 TensorFlow 仓库,您应该可以使用此`build`命令来执行此操作,但如果没有,请查看该新版本的文档。
3. 使用 TensorFlow Lite 转换器工具将 TensorFlow 模型转换为 TensorFlow Lite 模型。 在下一节中,您将看到一个详细的示例。
......
......@@ -41,7 +41,7 @@
您还需要 HDMI 电缆将 Raspberry Pi 板连接到计算机显示器,USB 键盘和 USB 鼠标。 总共要花 200 美元,包括 110 美元的 GoPiGo,来构建一个可以移动,看,听,说的 Raspberry Pi 机器人。 尽管与功能强大的 Raspberry Pi 计算机相比,GoPiGo 套件似乎有点昂贵,但是如果没有它,那么一动不动的 Raspberry Pi 可能会失去很多吸引力。
有一个较旧的博客,[“如何用100美元和TensorFlow构建“可视”的机器人”](https://www.oreilly.com/learning/how-to-build-a-robot-that-sees-with-100-and-tensorflow),由 Lukas Biewald 于 2016 年 9 月撰写,内容涵盖了如何使用 TensorFlow 和 Raspberry Pi 3 以及一些其他部件来构建能够说话和说话的机器人。 这很有趣。 我们这里介绍的内容除了提供语音命令识别和强化学习外,还提供了更详细的步骤来设置带有 GoPiGo 的 Raspberry Pi 3,GoPiGo(易于使用且受 Google 推荐的工具包,可将 Pi 变成机器人)以及更新版本的 TensorFlow 1.6。
有一个较旧的博客,[“如何用 100 美元和 TensorFlow 构建“可视”的机器人”](https://www.oreilly.com/learning/how-to-build-a-robot-that-sees-with-100-and-tensorflow),由 Lukas Biewald 于 2016 年 9 月撰写,内容涵盖了如何使用 TensorFlow 和 Raspberry Pi 3 以及一些其他部件来构建能够说话和说话的机器人。 这很有趣。 我们这里介绍的内容除了提供语音命令识别和强化学习外,还提供了更详细的步骤来设置带有 GoPiGo 的 Raspberry Pi 3,GoPiGo(易于使用且受 Google 推荐的工具包,可将 Pi 变成机器人)以及更新版本的 TensorFlow 1.6。
现在,让我们首先看看如何设置 Raspbian,Raspberry Pi 开发板的操作系统。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册