提交 7bc55962 编写于 作者: W wizardforcel

2020-12-23 21:19:01

上级 ba9bf8e5
......@@ -28,13 +28,13 @@ TensorFlow 是用于机器学习以及最近的深度学习的最受欢迎的架
在本书中,我们将使用 Python 3,TensorFlow,TensorBoard 和 Keras。 请确保在计算机上安装了以下软件:
* 代码编辑器,例如:Visual Studio 代码(https://code.visualstudio.com/)
* 代码编辑器,例如:[Visual Studio Code](https://code.visualstudio.com/)
* Python 3.6
* Windows 上的 TensorFlow 1.4 或更高版本
* 大声 2
* Keras 2
* 张量板
* Jupyter 笔记本
* 大熊猫
* Pandas
* NumPy
* 操作系统:Windows(8 或更高版本),MacOS 或 Linux(Ubuntu)
......@@ -104,9 +104,9 @@ $ python3 lesson_1/activity_1/test_stack.py
下载文件后,请确保使用以下最新版本解压缩或解压缩文件夹:
* Windows 的 WinRAR / 7-Zip
* 适用于 Mac 的 Zipeg / iZip / UnRarX
* 适用于 Linux 的 7-Zip / PeaZip
* Windows 的 WinRAR/7-Zip
* 适用于 Mac 的 Zipeg/iZip/UnRarX
* 适用于 Linux 的 7-Zip/PeaZip
本书的代码包也托管在 [GitHub](https://github.com/TrainingByPackt/Beginning-Application-Developmentwith-TensorFlow-and-Keras) 上。 我们还从[这里](https://github.com/PacktPublishing/)提供了丰富的书籍和视频目录中的其他代码包。 去看一下!
......@@ -119,7 +119,7 @@ $ python3 lesson_1/activity_1/test_stack.py
1. 在浏览器中访问[这里](https://code.visualstudio.com/)
2. 单击主页右上角的下载。
3. 接下来,选择 Windows。
4. 按照安装程序中的步骤就可以了! 您的 Visual Studio 代码已准备就绪。
4. 按照安装程序中的步骤就可以了! 您的 Visual Studio Code 已准备就绪。
## 安装 Python 3
......
......@@ -81,7 +81,7 @@
![Representation Learning](img/image01_01.jpg)
图 1:从输入数据开始的一系列高级表示。 基于来自 Yan LeCun,Yoshua Bengio 和 Geoffrey Hinton 的原始图像得出的图像。 “深度学习”。 自然 521,436–444(2015 年 5 月 28 日)doi:10.1038 / nature14539
图 1:从输入数据开始的一系列高级表示。 基于原始图像得出的图像,来自 Yan LeCun,Yoshua Bengio 和 Geoffrey Hinton 的《深度学习》。
用正式的词来说,神经网络是计算图,其中每个步骤从输入数据计算更高的抽象表示。
......@@ -143,7 +143,7 @@
![Common Components and Operations of Neural Networks](img/image01_02.jpg)
图 2:神经网络中最常见的层的图示。 通过 Glosser.ca-自己的作品,文件的衍生物:人工神经网络.svg,CC BY-SA 3.0,https://commons.wikimedia.org/w/index.php?curid = 24913461
图 2:神经网络中最常见的层的图示。 来自 Glosser.ca 自己的作品:[`Artificial neural network.svg`文件的衍生物](https://commons.wikimedia.org/w/index.php?curid=24913461),CC BY-SA 3.0
隐藏层是神经网络中最重要的层。 它们被称为*隐藏*的,因为在其中生成的表示形式在数据中不可用,但可以从中学习。 在这些层中,神经网络中进行了主要计算。
......@@ -191,11 +191,11 @@ TensorFlow 也以其生产组件而闻名。 它随附 [TensorFlow 服务](https
TensorBoard 是用于探索 TensorFlow 模型的数据可视化套件,并与 TensorFlow 原生集成。 TensorBoard 通过训练 TensorFlow 在训练神经网络时使用的检查点和摘要文件来工作。 可以近乎实时(延迟 30 秒)或在网络完成训练后进行探索。 TensorBoard 使实验和探索神经网络的过程变得更加容易,而且跟随您的网络训练也非常令人兴奋!
### Jupyter 笔记本,熊猫和 NumPy
### Jupyter 笔记本,Pandas 和 NumPy
在使用 Python 创建深度学习模型时,通常开始进行交互工作,慢慢地开发一个模型,最终将其变成结构化的软件。 在此过程中,经常使用以下三个 Python 程序包:Jupyter Notebooks,Pandas 和 NumPy:
在使用 Python 创建深度学习模型时,通常开始进行交互工作,慢慢地开发一个模型,最终将其变成结构化的软件。 在此过程中,经常使用以下三个 Python 程序包:Jupyter 笔记本,Pandas 和 NumPy:
* Jupyter Notebooks 创建使用网络浏览器作为其界面的交互式 Python 会话
* Jupyter 笔记本 创建使用网络浏览器作为其界面的交互式 Python 会话
* Pandas 是用于数据操纵和分析的程序包
* NumPy 是,经常用于整形数据和执行数值计算
......@@ -225,7 +225,7 @@ Michael Heydt 的《学习 Pandas》和 Dan Toomey 的《学习 Jupyter》提供
| 硬 | 提供与 TensorFlow 的高级接口的 Python 软件包。 | 2.0.8-tf(随 TensorFlow 一起分发) |
| 张量板 | 基于浏览器的软件,用于可视化神经网络统计信息。 | 0.4.0 |
| Jupyter 笔记本 | 基于浏览器的软件,用于与 Python 会话进行交互。 | 5.2.1 |
| 大熊猫 | 用于分析和处理数据的 Python 软件包。 | 0.21.0 |
| Pandas | 用于分析和处理数据的 Python 软件包。 | 0.21.0 |
| NumPy | 用于高性能数值计算的 Python 软件包。 | 1.13.3 |
> 表 1:创建深度学习环境所需的软件组件
......@@ -261,7 +261,7 @@ Michael Heydt 的《学习 Pandas》和 Dan Toomey 的《学习 Jupyter》提供
![Activity 1 – Verifying Software Components](img/image01_03.jpg)
> 图 3:运行 pip 的终端的图像,用于从 requirements.txt 安装依赖项
> 图 3:运行 PIP 的终端的图像,用于从`requirements.txt`安装依赖项
通过运行以下命令来安装依赖项:
......@@ -293,7 +293,7 @@ Michael Heydt 的《学习 Pandas》和 Dan Toomey 的《学习 Jupyter》提供
![Activity 1 – Verifying Software Components](img/image01_04.jpg)
> 图 4:运行 python3 test_stack.py 的终端的图像。 该脚本返回消息,通知所有依赖项均已正确安装。
> 图 4:运行`python3 test_stack.py`的终端的图像。 该脚本返回消息,通知所有依赖项均已正确安装。
### 注意
......@@ -328,7 +328,7 @@ CIFAR 数据集是机器学习数据集,其中包含按不同类别组织的
![MNIST Dataset](img/image01_05.jpg)
图 5:MNIST 数据集训练集中的节选。 每个图像是一个单独的 20x20 像素的图像,带有一个手写数字。 原始数据集可在以下位置获得:http://yann.lecun.com/exdb/mnist/。
图 5:MNIST 数据集训练集中的节选。 每个图像是一个单独的`20x20`像素的图像,带有一个手写数字。 原始数据集可在以下位置获得:http://yann.lecun.com/exdb/mnist/。
###### 使用 TensorFlow 训练神经网络
......@@ -457,11 +457,11 @@ $ tensorboard --logdir=mnist_example/
现在让我们探索我们训练有素的神经网络,看看它是如何工作的。
在 TensorBoard 页面上,单击**标量**页面,然后放大**精度**图。 现在,将**平滑**滑块移动到 **0.9**
在 TensorBoard 页面上,单击**标量**页面,然后放大**精度**图。 现在,将**平滑**滑块移动到`0.9`
准确性图衡量网络能够猜测测试集标签的准确性。 最初,网络猜测这些标签完全错误。 发生这种情况是因为我们已使用随机值初始化了网络的权重和偏差,因此其首次尝试只是一个猜测。 然后,网络将在第二次运行中更改其层的权重和偏差; 网络将继续通过改变其权重和偏见来投资于那些能带来积极成果的节点,并通过逐渐减少其对网络的影响(最终达到`0`)来惩罚那些没有结果的节点。 如您所见,这是一种非常有效的技术,可以快速产生出色的结果。
让我们将注意力集中在**精度**图表上。 看看在大约 1,000 个周期后,该算法如何达到很高的准确性(> 95% )? 在 1,000 到 2,000 个时代之间会发生什么? 如果我们继续训练更多的时期,它将变得更加准确吗?
让我们将注意力集中在**精度**图表上。 看看在大约 1,000 个周期后,该算法如何达到很高的准确性(`> 95%`)? 在 1,000 到 2,000 个时代之间会发生什么? 如果我们继续训练更多的时期,它将变得更加准确吗?
当网络的精度继续提高时,在 1,000 到 2,000 之间,但是的速率下降。 如果训练更多的时间段,网络可能会略有改善,但是在当前架构下,其精度不会达到 100%。
......
......@@ -87,7 +87,7 @@ GAN 已成功用于数据具有清晰拓扑结构的领域。 它的原始实现
有关更多信息,请参阅[《通过深度强化学习进行人类水平控制》](https://storage.googleapis.com/deepmind-media/dqn/DQNNaturePaper.pdf)
在 DeepMind 创建 AlphaGo 之后,深度强化学习(HTG0)模型获得了普及,AlphaGo 是一种玩 Go 游戏的系统,其性能优于专业玩家。 DeepMind 还创建了 DRL 网络,该网络完全依靠自己来学习如何以超人的水平玩视频游戏:
在 DeepMind 创建 AlphaGo 之后,深度强化学习(DRL)模型获得了普及,AlphaGo 是一种玩 Go 游戏的系统,其性能优于专业玩家。 DeepMind 还创建了 DRL 网络,该网络完全依靠自己来学习如何以超人的水平玩视频游戏:
![Deep Reinforcement Learning](img/image02_04.jpg)
......@@ -161,7 +161,7 @@ GAN 已成功用于数据具有清晰拓扑结构的领域。 它的原始实现
![Maximum and Minimum Normalization](img/image02_14.jpg)
在这里,![Maximum and Minimum Normalization](img/image02_11.jpg)是![Maximum and Minimum Normalization](img/image02_12.jpg)观测值,`O`表示具有所有 O 值的向量,并且函数 min(O)和 max(O)分别表示该序列的最小值和最大值
在这里,![Maximum and Minimum Normalization](img/image02_11.jpg)是![Maximum and Minimum Normalization](img/image02_12.jpg)观测值,`O`表示具有所有`0`值的向量,并且函数` min(O)``max(O)`分别表示该序列的最小值和最大值
在“活动 3”,“探索比特币数据集并为模型准备数据”中,我们将准备可用的比特币数据以用于我们的 LSTM 模式。 其中包括选择感兴趣的变量,选择相关时段并应用先前的点相对归一化技术。
......@@ -187,29 +187,29 @@ GAN 已成功用于数据具有清晰拓扑结构的领域。 它的原始实现
## 活动 3 –探索比特币数据集并为模型准备数据
我们将使用最初从 CoinMarketCap 检索的公共数据集(HTG0),该数据是一个流行的网站,跟踪不同的加密货币统计数据。 数据集已在本课程中提供,并将在本书的其余部分中使用。
我们将使用最初从 CoinMarketCap 检索的公共数据集,该数据是一个流行的网站,跟踪不同的加密货币统计数据。 数据集已在本课程中提供,并将在本书的其余部分中使用。
我们将使用 Jupyter Notebooks 探索数据集。 Jupyter Notebooks 通过网络浏览器提供 Python 会话,使您可以交互地处理数据。 它们是用于探索数据集的流行工具。 在本书的所有活动中都将使用它们。
我们将使用 Jupyter 笔记本探索数据集。 Jupyter 笔记本通过网络浏览器提供 Python 会话,使您可以交互地处理数据。 它们是用于探索数据集的流行工具。 在本书的所有活动中都将使用它们。
使用您的终端,导航到目录`lesson_2/activity_3`并执行以下命令以启动 Jupyter Notebook 实例:
使用您的终端,导航到目录`lesson_2/activity_3`并执行以下命令以启动 Jupyter 笔记本实例:
```py
$ jupyter notebook
```
现在,在浏览器中打开应用程序提供的 URL。 您应该能够看到 Jupyter Notebook 页面,其中包含文件系统中的许多目录。
现在,在浏览器中打开应用程序提供的 URL。 您应该能够看到 Jupyter 笔记本页面,其中包含文件系统中的许多目录。
您应该看到以下输出:
![Activity 3 – Exploring the Bitcoin Dataset and Preparing Data for Model](img/image02_18.jpg)
图 6:启动 Jupyter Notebook 实例后的终端映像。 导航到浏览器中显示的 URL,您应该能够看到 Jupyter Notebook 登陆页面。
图 6:启动 Jupyter 笔记本实例后的终端映像。 导航到浏览器中显示的 URL,您应该能够看到 Jupyter 笔记本登陆页面。
现在,导航至目录,然后单击文件`Activity_3_Exploring_Bitcoin_Dataset.ipynb`。 这是一个 Jupyter Notebook 文件,将在新的浏览器选项卡中打开。 该应用程序将自动为您启动一个新的 Python 交互式会话。
现在,导航至目录,然后单击文件`Activity_3_Exploring_Bitcoin_Dataset.ipynb`。 这是一个 Jupyter 笔记本文件,将在新的浏览器选项卡中打开。 该应用程序将自动为您启动一个新的 Python 交互式会话。
![Activity 3 – Exploring the Bitcoin Dataset and Preparing Data for Model](img/image02_19.jpg)
图 7:Jupyter Notebook 实例的登录页面
图 7:Jupyter 笔记本实例的登录页面
![Activity 3 – Exploring the Bitcoin Dataset and Preparing Data for Model](img/image02_20.jpg)
......@@ -241,9 +241,9 @@ $ jupyter notebook
> 表 2:比特币历史价格数据集中的可用变量(即列)
现在使用打开的 Jupyter Notebook 实例,我们探索其中两个变量的时间序列:`close``volume`。 我们将从这些时间序列开始探讨价格波动模式。
现在使用打开的 Jupyter 笔记本实例,我们探索其中两个变量的时间序列:`close``volume`。 我们将从这些时间序列开始探讨价格波动模式。
导航到 Jupyter Notebook `Activity_3_Exploring_Bitcoin_Dataset.ipynb`的打开的实例。 现在,执行标题`Introduction`下的所有单元格。 这将导入所需的库并将数据集导入内存。
导航到 Jupyter 笔记本`Activity_3_Exploring_Bitcoin_Dataset.ipynb`的打开的实例。 现在,执行标题`Introduction`下的所有单元格。 这将导入所需的库并将数据集导入内存。
将数据集导入内存后,移至`Exploration`部分。 您将找到一个代码片段,该代码片段为`close`变量生成时间序列图。 您可以为`volume`变量生成相同的图吗?
......@@ -273,9 +273,9 @@ bitcoin_recent = bitcoin[bitcoin['date'] >= '2016-01-01']
作为最后一步,我们现在使用“数据归一化”部分中介绍的点相对归一化技术对数据进行归一化。 我们将仅归一化两个变量(`close``volume`),因为这是我们正在努力预测的变量。
在包含本课程的同一目录中,我们放置了一个名为`normalizations.py`的脚本。 该脚本包含本课中描述的三种标准化技术。 我们将该脚本导入到 Jupyter Notebook 中,并将这些功能应用于我们的系列。
在包含本课程的同一目录中,我们放置了一个名为`normalizations.py`的脚本。 该脚本包含本课中描述的三种标准化技术。 我们将该脚本导入到 Jupyter 笔记本中,并将这些功能应用于我们的系列。
导航到“为模型准备数据集”部分。 现在,使用`iso_week`变量使用 pandas 方法`groupby()`将给定一周中的全天观察分组。 现在,我们可以在一周内将归一化函数`normalizations.point_relative_normalization()`直接应用于该系列。 我们使用以下命令将该归一化的输出存储为同一熊猫数据框中的新变量:
导航到“为模型准备数据集”部分。 现在,使用`iso_week`变量使用 pandas 方法`groupby()`将给定一周中的全天观察分组。 现在,我们可以在一周内将归一化函数`normalizations.point_relative_normalization()`直接应用于该系列。 我们使用以下命令将该归一化的输出存储为同一Pandas数据框中的新变量:
```py
bitcoin_recent['close_point_relative_normalization'] =
......@@ -287,7 +287,7 @@ lambda x: normalizations.point_relative_normalization(x))
![Activity 3 – Exploring the Bitcoin Dataset and Preparing Data for Model](img/image02_24.jpg)
图 12:Jupyter Notebook 的图像,重点是应用归一化功能的部分
图 12:Jupyter 笔记本的图像,重点是应用归一化功能的部分
标准化的`close`变量每周包含一个有趣的方差模式。 我们将使用该变量来训练我们的 LSTM 模型。
......@@ -415,13 +415,13 @@ Keras 允许在每个步骤中进行更大的控制。 但是,其重点是使
Keras 用作较低级程序的接口; 在这种情况下,使用 TensorFlow。 当我们使用 Keras 设计神经网络时,该神经网络被*编译为* TensorFlow 计算图。
导航到 Jupyter Notebook `Activity_4_Creating_a_TensorFlow_Model_Using_Keras.ipynb`的打开的实例。 现在,执行标题**构建模型**下的所有单元格。 在该部分中,我们建立第一个参数化两个值的 LSTM 模型:训练观察的输入大小(一天相当于 1 个值)和预测期间的输出大小(在我们的情况下为 7 天):
导航到 Jupyter 笔记本`Activity_4_Creating_a_TensorFlow_Model_Using_Keras.ipynb`的打开的实例。 现在,执行标题**构建模型**下的所有单元格。 在该部分中,我们建立第一个参数化两个值的 LSTM 模型:训练观察的输入大小(一天相当于 1 个值)和预测期间的输出大小(在我们的情况下为 7 天):
![Activity 4 – Creating a TensorFlow Model Using Keras](img/image02_28.jpg)
图 16:来自 Jupyter Notebook 实例的图像,我们在其中构建了 LSTM 模型的第一个版本
图 16:来自 Jupyter 笔记本实例的图像,我们在其中构建了 LSTM 模型的第一个版本
使用 Jupyter Notebook `Activity_4_Creating_a_TensorFlow_Model_Using_Keras.ipynb`从“模型组件”部分构建相同的模型,对输入和输出的周期长度进行参数设置,以便进行实验。
使用 Jupyter 笔记本`Activity_4_Creating_a_TensorFlow_Model_Using_Keras.ipynb`从“模型组件”部分构建相同的模型,对输入和输出的周期长度进行参数设置,以便进行实验。
编译模型后,我们将其作为`h5`文件存储在磁盘上。 优良作法是偶尔将模型的版本存储在磁盘上,以便将模型架构的版本与预测功能一起保留。
......@@ -606,7 +606,7 @@ LSTM 是计算上昂贵的模型。 在现代计算机上,我们最多可能
我们将通过加载先前活动中准备的数据集来开始。 我们使用`pandas`将数据集加载到内存中。
2. 使用大熊猫将训练数据集加载到内存中,如下所示:
2. 使用Pandas将训练数据集加载到内存中,如下所示:
```py
train = pd.read_csv('data/train_dataset.csv')
......@@ -659,7 +659,7 @@ LSTM 是计算上昂贵的模型。 在现代计算机上,我们最多可能
![Activity 5 – Assembling a Deep Learning System](img/image02_33.jpg)
图 22:Jupyter Notebook 的部分,我们在其中加载早期模型并使用新数据进行训练
图 22:Jupyter 笔记本的部分,我们在其中加载早期模型并使用新数据进行训练
最后,让用我们训练有素的模型进行预测。
......@@ -677,7 +677,7 @@ LSTM 是计算上昂贵的模型。 在现代计算机上,我们最多可能
![Activity 5 – Assembling a Deep Learning System](img/image02_34.jpg)
图 23:Jupyter Notebook 部分,我们在其中预测了未来 7 天的比特币价格。 我们的预测表明价格将大幅上涨约 30%。
图 23:Jupyter 笔记本部分,我们在其中预测了未来 7 天的比特币价格。 我们的预测表明价格将大幅上涨约 30%。
![Activity 5 – Assembling a Deep Learning System](img/image02_35.jpg)
......
......@@ -309,9 +309,9 @@ return np.mean(np.abs((A - B) / A)) * 100
在此活动中,我们为神经网络创建了一个训练环境,以促进其训练和评估。 这个环境对于我们的下一课特别重要,在下一课中,我们寻找超参数的最佳组合。
首先,我们将启动 Jupyter Notebook 实例和 TensorBoard 实例。 在此活动的其余部分中,这两个实例都可以保持打开状态。
首先,我们将启动 Jupyter 笔记本实例和 TensorBoard 实例。 在此活动的其余部分中,这两个实例都可以保持打开状态。
1. 在您的终端上,导航至目录`lesson_3/activity_6`并执行以下代码以启动 Jupyter Notebook 实例:
1. 在您的终端上,导航至目录`lesson_3/activity_6`并执行以下代码以启动 Jupyter 笔记本实例:
```py
$ jupyter notebook
......@@ -321,7 +321,7 @@ return np.mean(np.abs((A - B) / A)) * 100
![Activity 6 – Creating an Active Training Environment](img/image03_13.jpg)
图 7:Jupyter Notebook 突出显示``评估 LSTM 模型''部分
图 7:Jupyter 笔记本突出显示``评估 LSTM 模型''部分
3. 同样在您的终端机上,通过执行以下命令来启动 TensorBoard 实例:
......@@ -332,7 +332,7 @@ return np.mean(np.abs((A - B) / A)) * 100
4. 打开出现在屏幕上的 URL,并使该浏览器选项卡也保持打开状态。
5. 现在,将训练(`train_dataset.csv`)和测试集(`test_dataset.csv`)以及我们先前编译的模型(`bitcoin_lstm_v0.h5`)都加载到笔记本中。
6. 使用以下命令在 Jupyter Notebook 实例中加载训练和测试数据集:
6. 使用以下命令在 Jupyter 笔记本实例中加载训练和测试数据集:
```py
$ train = pd.read_csv('data/train_dataset.csv')
......
......@@ -52,7 +52,7 @@
> “代码段 1”:`CoinMarketCap()`类中的`historic()`方法。 此方法从 CoinMarketCap 网站收集数据,对其进行解析,然后返回 Pandas DataFrame。
`historic()`类返回一个熊猫`DataFrame`,准备由`Model()`类使用。
`historic()`类返回一个Pandas`DataFrame`,准备由`Model()`类使用。
当在其他模型中工作时,请考虑创建实现与`CoinMarketCap()`类相同功能的程序组件(例如 Python 类)。 也就是说,创建一个组件,该组件将从可用数据中获取数据,解析该数据,并以可用格式将其提供给您的建模组件。
......@@ -173,9 +173,9 @@ M.train(model_data[i*7:7*(40 + i) + 7])
首先,我们从导入`cryptonic`开始。 Cryptonic 是为本书开发的简单软件应用程序,它使用 Python 类和模块实现了本节之前的所有步骤。 将 Cryptonic 视为开发相似应用程序的模板。
`cryptonic`作为 Python 模块随此活动一起提供。 首先,我们将启动 Jupyter Notebook 实例,然后将加载`cryptonic`程序包。
`cryptonic`作为 Python 模块随此活动一起提供。 首先,我们将启动 Jupyter 笔记本实例,然后将加载`cryptonic`程序包。
1. 在您的终端上使用,导航到目录`lesson_4/activity_8`,然后执行以下代码来启动 Jupyter Notebook 实例:
1. 在您的终端上使用,导航到目录`lesson_4/activity_8`,然后执行以下代码来启动 Jupyter 笔记本实例:
```py
$ jupyter notebook
......
......@@ -41,7 +41,7 @@ GPU 状态
# 机器学习 Docker 文件
现在,让我们开始准备准备机器学习的 Docker 文件。 在本节中,我们将研究克隆源文件,Docker 所需的基本映像,安装其他必需的软件包,公开一个卷以便您可以共享您的工作以及公开端口以便您能够 看 Jupyter Notebooks,这是我们将用来探索机器学习的工具。
现在,让我们开始准备准备机器学习的 Docker 文件。 在本节中,我们将研究克隆源文件,Docker 所需的基本映像,安装其他必需的软件包,公开一个卷以便您可以共享您的工作以及公开端口以便您能够 看 Jupyter 笔记本,这是我们将用来探索机器学习的工具。
现在,您需要获取这些部分附带的源代码。 前往[这里](https://github.com/wballard/kerasvideo/tree/2018),您可以在其中快速克隆存储库。 在这里,我们只是使用 GitHub for Windows 作为一种相对快速的方法来克隆该存储库,但是您可以以自己喜欢的任何方式使用 Git。 将这些文件放在哪个目录中都没有关系。 我们只是将它们下载到本地工作目录中。 然后,我们将使用此位置作为开始构建实际 Docker 容器的位置。
......@@ -147,7 +147,7 @@ C:\11519>docker build -t keras .
方便地,在 Linux 上构建的命令与在 Windows 上使用 Docker 的命令完全相同。 但是,如果要在 Linux 主机上使用 GPU 支持,则可以选择使用`nvidia-docker`进行构建。 那么`docker build`的作用是什么? 好吧,它将获取并执行 Docker 文件,下载软件包,创建文件系统,运行命令,然后将所有这些更改保存到虚拟文件系统中,以便以后可以重用。 每次运行 Docker 容器时,它都从运行构建时的状态开始。 这样,每次运行都是一致的。
既然我们已经运行了 Docker 容器,我们将继续到下一部分,在这里我们将使用 Jupyter Notebook 设置并运行 REST 服务。
既然我们已经运行了 Docker 容器,我们将继续到下一部分,在这里我们将使用 Jupyter 笔记本设置并运行 REST 服务。
# 机器学习 REST 服务
......
# 图片资料
在上一章中,我们准备了机器学习工具包,在其中设置了 Keras 和 Docker,以便允许我们运行 Jupyter Notebooks 处理机器学习。
在上一章中,我们准备了机器学习工具包,在其中设置了 Keras 和 Docker,以便允许我们运行 Jupyter 笔记本 处理机器学习。
在本章中,我们将研究准备供机器学习使用的图像数据,以及将其连接到 Keras 中涉及的步骤。 我们将从了解 MNIST 数字开始。 这些是图像形式的手写字符,我们将在机器学习中有效执行**光学字符识别****OCR**)。 然后,我们将讨论张量。 张量听起来像是一个数学词,的确是,但是作为一名程序员,您已经看到了多维数组,因此您实际上已经在使用张量,我将向您展示其等效性。 之后,我们将图像转换为张量。 正如您习惯在计算机上看到图像一样,图像需要一种特殊的编码形式才能与机器学习一起使用。
......
......@@ -82,7 +82,7 @@
一旦我们将数据与它们的标签配对在一起,就可以训练我们的连体网络。 从图像对中,我们将一个图像馈入网络 A,将另一个图像馈入网络 B。这两个网络的作用仅仅是提取特征向量。 因此,我们使用具有**整流线性单元****ReLU**)激活的两个卷积层来提取特征。 一旦了解了特征,就将来自两个网络的合成特征向量馈入能量函数,以测量相似度。 我们使用欧几里得距离作为我们的能量函数。 因此,我们通过提供图像对来训练我们的网络,以了解它们之间的语义相似性。 现在,我们将逐步看到这一点。
为了更好地理解,您可以检查完整的代码,该代码可以在 Jupyter Notebook 中找到,[并在此处进行解释](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/02.%20Face%20and%20Audio%20Recognition%20using%20Siamese%20Networks/2.4%20Face%20Recognition%20Using%20Siamese%20Network.ipynb)
为了更好地理解,您可以检查完整的代码,该代码可以在 Jupyter 笔记本中找到,[并在此处进行解释](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/02.%20Face%20and%20Audio%20Recognition%20using%20Siamese%20Networks/2.4%20Face%20Recognition%20Using%20Siamese%20Network.ipynb)
首先,我们将导入所需的库:
......@@ -389,7 +389,7 @@ compute_accuracy(pred, y_test)
现在,我们将逐步展示如何训练连体网络以识别音频是狗的吠叫声还是其他声音。
为了更好地理解,您可以检查完整的代码,该代码可以在 Jupyter Notebook 中找到,[并在此处进行解释](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/02.%20Face%20and%20Audio%20Recognition%20using%20Siamese%20Networks/2.5%20Audio%20Recognition%20using%20Siamese%20Network.ipynb)
为了更好地理解,您可以检查完整的代码,该代码可以在 Jupyter 笔记本中找到,[并在此处进行解释](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/02.%20Face%20and%20Audio%20Recognition%20using%20Siamese%20Networks/2.5%20Audio%20Recognition%20using%20Siamese%20Network.ipynb)
首先,我们将加载所有必需的库:
......
......@@ -69,7 +69,7 @@
现在,我们将看到如何使用原型网络执行分类任务。 我们使用 omniglot 数据集进行分类。 该数据集包含来自 50 个不同字母的 1,623 个手写字符,每个字符都有 20 个不同的示例,这些示例是由不同的人编写的。 由于我们希望我们的网络从数据中学习,因此我们以相同的方式对其进行训练。 我们从每个类中采样五个示例,并将其用作我们的支持集。 我们使用四个卷积块作为编码器来学习支持集的嵌入,并构建类原型。 同样,我们从每个类中为我们的查询集采样五个示例,学习查询集嵌入,并通过比较查询集嵌入和类原型之间的欧式距离来预测查询集类。 让我们逐步了解它会更好地理解这一点。
[您还可以在此处查看 Jupyter Notebook 中可用的代码并进行解释](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/03.%20Prototypical%20Networks%20and%20its%20Variants/3.3%20Omniglot%20Character%20set%20classification%20using%20Prototypical%20Network.ipynb)
[您还可以在此处查看 Jupyter 笔记本中可用的代码并进行解释](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/03.%20Prototypical%20Networks%20and%20its%20Variants/3.3%20Omniglot%20Character%20set%20classification%20using%20Prototypical%20Network.ipynb)
首先,我们导入所有必需的库:
......
......@@ -94,7 +94,7 @@
关系函数非常简单,对吧? 通过在 TensorFlow 中实现一个关系网络,我们将更好地理解关系网络。
[您还可以在此处查看 Jupyter Notebook 中可用的代码并进行解释](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/04.%20Relation%20and%20Matching%20Networks%20Using%20Tensorflow/4.5%20Building%20Relation%20Network%20Using%20Tensorflow.ipynb)
[您还可以在此处查看 Jupyter 笔记本中可用的代码并进行解释](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/04.%20Relation%20and%20Matching%20Networks%20Using%20Tensorflow/4.5%20Building%20Relation%20Network%20Using%20Tensorflow.ipynb)
首先,我们导入所有必需的库:
......
......@@ -161,7 +161,7 @@ NTM 的重要组成部分如下:
现在,我们将看到如何使用 NTM 执行复制任务。 复制任务的目的是了解 NTM 如何存储和调用任意长度的序列。 我们将为网络提供一个随机序列,以及一个指示序列结束的标记。 它必须学习输出给定的输入序列。 因此,网络会将输入序列存储在内存中,然后从内存中回读。 现在,我们将逐步了解如何执行复制任务,然后在最后看到整个最终代码。
[您还可以在此处查看 Jupyter Notebook 中提供的代码,并附带说明](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/05.%20Memory%20Augmented%20Networks/5.4%20Copy%20Task%20Using%20NTM.ipynb)
[您还可以在此处查看 Jupyter 笔记本中提供的代码,并附带说明](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/05.%20Memory%20Augmented%20Networks/5.4%20Copy%20Task%20Using%20NTM.ipynb)
首先,我们将了解如何实现 NTM 单元。 而不是查看整个代码,我们将逐行查看它。
......
......@@ -112,7 +112,7 @@ MAML 非常擅长寻找最佳初始参数,对吗? 现在,我们将看到
在上一节中,我们了解了 MAML 的工作原理。 我们看到了 MAML 如何获得更好,更健壮的模型参数θ,该参数可以在各个任务之间推广。 现在,我们将通过从头开始编码来更好地了解 MAML。 为了更好地理解,我们将考虑一个简单的二进制分类任务。 我们随机生成输入数据,并使用简单的单层神经网络对其进行训练,然后尝试找到最佳参数θ。 现在,我们将逐步逐步了解如何执行此操作:
[您还可以在此处查看 Jupyter Notebook 中提供的代码,并附带说明](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/06.%20MAML%20and%20it's%20Variants/6.5%20Building%20MAML%20From%20Scratch.ipynb)
[您还可以在此处查看 Jupyter 笔记本中提供的代码,并附带说明](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/06.%20MAML%20and%20it's%20Variants/6.5%20Building%20MAML%20From%20Scratch.ipynb)
首先,我们导入`numpy`库:
......@@ -517,7 +517,7 @@ Sampling Next Batch of Tasks
在上一节中,我们了解了 ADML 的工作原理。 我们看到了如何使用干净样本和对抗样本训练我们的模型,以获得更好,更健壮的模型参数θ,该参数可在各个任务之间推广。 现在,我们将通过从头开始编码来更好地理解 ADML。 为了更好地理解,我们将考虑一个简单的二进制分类任务。 我们随机生成输入数据,并使用单层神经网络对其进行训练,然后尝试找到最佳参数`theta`。 现在,我们将逐步了解 ADML 的工作原理。
[您还可以在此处查看 Jupyter Notebook 中提供的代码,并附带说明](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/06.%20MAML%20and%20it's%20Variants/6.7%20Building%20ADML%20From%20Scratch.ipynb)
[您还可以在此处查看 Jupyter 笔记本中提供的代码,并附带说明](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/06.%20MAML%20and%20it's%20Variants/6.7%20Building%20ADML%20From%20Scratch.ipynb)
首先,我们导入所有必需的库:
......
......@@ -80,7 +80,7 @@
在上一节中,我们了解了 Meta-SGD 的工作原理。 我们看到了 Meta-SGD 如何获得更好,更健壮的模型参数![](img/0d2d5f82-a3f2-4f2e-a7e0-6d458a3a6600.png),该参数可跨任务进行通用化,并具有最佳的学习率和更新方向。 现在,我们将从头开始对 Meta-SGD 进行编码,以更好地了解它们。 就像我们在 MAML 中所做的一样,为了更好地理解,我们将考虑一个简单的二进制分类任务。 我们随机生成输入数据,并使用简单的单层神经网络对其进行训练,并尝试找到最佳参数![](img/02af8bcf-db2f-4e62-9447-2e072986d3b3.png)。 我们将逐步详细介绍如何执行此操作。
[您还可以在此处查看 Jupyter Notebook 中提供的代码,并提供说明](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/07.%20Meta-SGD%20and%20Reptile%20Algorithms/7.4%20Building%20Meta-SGD%20from%20Scratch.ipynb)
[您还可以在此处查看 Jupyter 笔记本中提供的代码,并提供说明](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/07.%20Meta-SGD%20and%20Reptile%20Algorithms/7.4%20Building%20Meta-SGD%20from%20Scratch.ipynb)
首先,我们导入`numpy`库:
......@@ -460,7 +460,7 @@ Sampling Next Batch of Tasks
假设`y = amplitude * sin(x + phase)`。 我们算法的目标是学习在给定`x`的情况下对`y`的值进行回归。 幅度的值在 0.1 到 5.0 之间随机选择,相位的值在 0 到![](img/21218cec-890b-4d1e-bca2-5f739aa42d55.png)之间随机选择。 因此,对于每个任务,我们仅采样 10 个数据点并训练网络-也就是说,对于每个任务,我们仅采样 10 个`(x, y)`对。 让我们看一下代码并详细查看它。
[您还可以在此处查看 Jupyter Notebook 中提供的代码,并提供说明](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/07.%20Meta-SGD%20and%20Reptile%20Algorithms/7.7%20Sine%20wave%20Regression%20Using%20Reptile.ipynb)
[您还可以在此处查看 Jupyter 笔记本中提供的代码,并提供说明](https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python/blob/master/07.%20Meta-SGD%20and%20Reptile%20Algorithms/7.7%20Sine%20wave%20Regression%20Using%20Reptile.ipynb)
首先,我们导入所有必需的库:
......
......@@ -25,11 +25,11 @@
![](img/5fc96b69-e4fa-497c-9c96-25fc7005239d.png)
您可以删除超过 x% 的样本中所有为 0 或 1 的虚拟特征,或者可以为这些特征的方差建立最小阈值。 现在,可以使用前面的公式获得这些特征的方差,其中`p`是您的虚拟特征中`1`的数量或比例。 我们将在 Jupyter Notebook 中查看其工作原理。
您可以删除超过 x% 的样本中所有为 0 或 1 的虚拟特征,或者可以为这些特征的方差建立最小阈值。 现在,可以使用前面的公式获得这些特征的方差,其中`p`是您的虚拟特征中`1`的数量或比例。 我们将在 Jupyter 笔记本中查看其工作原理。
# 统计确定重要特征
此方法将帮助您利用一些统计测试来识别和选择相关功能。 因此,例如,对于分类任务,我们可以使用 ANOVA F 统计量来评估数字特征和目标之间的关系,这将是分类特征,因为这是经典任务的一个示例。 或者,为了评估分类特征与目标之间的统计关系,我们将使用卡方检验来评估这种关系。 在`scikit-learn`中,我们可以使用`SelectKBest`对象,我们将在 Jupyter Notebook 中了解如何使用这些对象。
此方法将帮助您利用一些统计测试来识别和选择相关功能。 因此,例如,对于分类任务,我们可以使用 ANOVA F 统计量来评估数字特征和目标之间的关系,这将是分类特征,因为这是经典任务的一个示例。 或者,为了评估分类特征与目标之间的统计关系,我们将使用卡方检验来评估这种关系。 在`scikit-learn`中,我们可以使用`SelectKBest`对象,我们将在 Jupyter 笔记本中了解如何使用这些对象。
# 递归特征消除
......@@ -163,7 +163,7 @@ RFE 是我们将使用`RandomForestClassifier`模型的第三种技术,请记
![](img/941fd408-2576-441e-b2eb-37e2ea9a84fa.png)
现在,让我们转到 Jupyter Notebook,看看如何实现降维方法并将 PCA 应用于给定的数据集:
现在,让我们转到 Jupyter 笔记本,看看如何实现降维方法并将 PCA 应用于给定的数据集:
![](img/0029c5de-ae04-47d1-b311-e42d0d1bff40.png)
......@@ -215,7 +215,7 @@ RFE 是我们将使用`RandomForestClassifier`模型的第三种技术,请记
# 创建新功能
我们将在此处使用信用卡默认值和钻石数据集。 现在,让我们转到 Jupyter Notebook 创建新功能,并了解这些技术在实践中的用途:
我们将在此处使用信用卡默认值和钻石数据集。 现在,让我们转到 Jupyter 笔记本创建新功能,并了解这些技术在实践中的用途:
![](img/1f149084-6127-4ec7-be75-0550b89c0895.png)
......@@ -306,7 +306,7 @@ RFE 是我们将使用`RandomForestClassifier`模型的第三种技术,请记
![](img/d9b2c9df-4eeb-4402-82d7-a47930ea0880.png)
因此,让我们转到 Jupyter Notebook,看看在本章前面看到的导入的信用卡默认数据集,但是正如您所看到的,已经对该数据集进行了一些修改:
因此,让我们转到 Jupyter 笔记本,看看在本章前面看到的导入的信用卡默认数据集,但是正如您所看到的,已经对该数据集进行了一些修改:
![](img/18835e99-b7bb-4d75-bc85-c5ff4582984f.png)
......
......@@ -228,7 +228,7 @@ image_dataset = image_path_dataset.map(preprocess_image)
# 地图功能
此转换 API 在数据集的每个元素上执行`map_func`输入。 对于那些使用大熊猫`Dataframe.apply(...)`的人来说,`map(...)`与之非常相似。 作为`map(...)` API 的自变量,它采用了一个应用于数据集每个元素的函数。 该函数继而从输入数据集中获取表示单个元素的`tf.Tensor`对象,并返回新转换的`tf.Tensor`对象。 请注意,输出中元素的顺序与输入数据集的顺序相同:
此转换 API 在数据集的每个元素上执行`map_func`输入。 对于那些使用Pandas`Dataframe.apply(...)`的人来说,`map(...)`与之非常相似。 作为`map(...)` API 的自变量,它采用了一个应用于数据集每个元素的函数。 该函数继而从输入数据集中获取表示单个元素的`tf.Tensor`对象,并返回新转换的`tf.Tensor`对象。 请注意,输出中元素的顺序与输入数据集的顺序相同:
```py
ds = tf.data.Dataset.range(1, 6) # [1, 2, 3, 4, 5]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册