提交 b4ffc7bc 编写于 作者: W wizardforcel

2021-01-06 21:45:20

上级 806aea54
......@@ -494,48 +494,13 @@ sudo pip3 install gym
通用 Q 学习可以应用于`FrozenLake-v0`环境。“表 9.5.1”显示了湿滑和非湿滑环境的性能改进。 衡量政策绩效的一种方法是执行的事件达到目标状态的百分比。 百分比越高,效果越好。 从大约 1.5% 的纯探查(随机操作)的基准来看,该策略可以在非光滑环境中达到约 76% 的目标状态,在光滑环境中可以达到约 71% 的目标状态。 不出所料,很难控制湿滑的环境。
| **模式** | **运行** | **大约百分比的目标** |
| 训练非滑动 |
```py
python3 q-frozenlake-9.5.1.py
```
| 26 |
| 测试非滑动 |
```py
python3 q-frozenlake-9.5.1.py -d
```
| 76 |
| 纯随机动作非滑动 |
```py
python3 q-frozenlake-9.5.1.py -e
```
| 1.5 |
| 训练滑动 |
```py
python3 q-frozenlake-9.5.1.py -s
```
| 26 |
| 测试滑动 |
```py
python3 q-frozenlake-9.5.1.py -s -d
```
| 71 |
| 纯随机动作滑动 |
```py
python3 q-frozenlake-9.5.1.py -s -e
```
| 1.5 |
| --- | --- | --- |
| 训练非滑动 | `python3 q-frozenlake-9.5.1.py` | 26 |
| 测试非滑动 | `python3 q-frozenlake-9.5.1.py -d` | 76 |
| 纯随机动作非滑动 | `python3 q-frozenlake-9.5.1.py -e` | 1.5 |
| 训练滑动 | `python3 q-frozenlake-9.5.1.py -s` | 26 |
| 测试滑动 | `python3 q-frozenlake-9.5.1.py -s -d` | 71 |
| 纯随机动作滑动 | `python3 q-frozenlake-9.5.1.py -s -e` | 1.5 |
表 9.5.1:在 FrozenLake-v0 环境中学习率为 0.5 的广义 Q 学习的基线和性能
......
......@@ -318,7 +318,7 @@ class REINFORCEBaselineAgent(REINFORCEAgent):
在的下一部分中,我们将介绍使用基准线方法对 REINFORCE 的改进。
# 4.演员批评
# 4.演员评论家
在带有基线的 REINFORCE 方法中,该值用作基线。 它不用于训练值功能。 在本节中,我们介绍 REINFORCE 与基线的变化,称为演员评论家方法。 政策和价值网络扮演着参与者和批评者网络的角色。 策略网络是参与者决定给定状态时要采取的操作。 同时,价值网络评估参与者或政策网络做出的决策。
......@@ -987,9 +987,10 @@ self.value_model = Model(inputs, value, name='value')
```
| **算法** | `logp_loss``y_true` | `value_loss``y_true` |
| 10.2.1 加强 | ![](img/B14853_10_167.png) | 不适用 |
| 10.3.1 使用基线加强 | ![](img/B14853_10_168.png) | ![](img/B14853_10_170.png) |
| 10.4.1 演员批评 | ![](img/B14853_10_169.png) | ![](img/B14853_10_171.png) |
| --- | --- | --- |
| 10.2.1 REINFORCE | ![](img/B14853_10_167.png) | 不适用 |
| 10.3.1 使用基线的 REINFORCE | ![](img/B14853_10_168.png) | ![](img/B14853_10_170.png) |
| 10.4.1 演员评论家 | ![](img/B14853_10_169.png) | ![](img/B14853_10_171.png) |
| 10.5.1 A2C | ![](img/B14853_10_172.png) | ![](img/B14853_10_173.png) |
表 10.6.1:`logp_loss``y_true`值和`value_loss`
......@@ -997,9 +998,10 @@ self.value_model = Model(inputs, value, name='value')
“表 10.6.2”中显示了用于计算“表 10.6.1”中的`y_true`的代码实现:
| **算法** | `y_true`公式 | Keras 中的`y_true` |
| 10.2.1 加强 | ![](img/B14853_10_174.png) | `reward * discount_factor` |
| 10.3.1 加强基线 | ![](img/B14853_10_175.png) | `(reward - self.value(state)[0]) * discount_factor` |
| 10.4.1 演员批评 | ![](img/B14853_10_176.png) | `(reward - self.value(state)[0] + gamma * next_value) * discount_factor` |
| --- | --- | --- |
| 10.2.1 REINFORCE | ![](img/B14853_10_174.png) | `reward * discount_factor` |
| 10.3.1 使用基线的 REINFORCE | ![](img/B14853_10_175.png) | `(reward - self.value(state)[0]) * discount_factor` |
| 10.4.1 演员评论家 | ![](img/B14853_10_176.png) | `(reward - self.value(state)[0] + gamma * next_value) * discount_factor` |
| 10.5.1 A2C | ![](img/B14853_10_177.png)和![](img/B14853_10_178.png) | (`reward - self.value(state)[0]`)和`reward` |
表 10.6.2:表 10.6.1 中的`y_true`
......@@ -1126,15 +1128,15 @@ python3 policygradient-car-10.1.1.py
“表 10.7.1”显示了其他运行`policygradient-car-10.1.1.py`的模式。 权重文件(即`*.h5`)可以替换为您自己的预训练权重文件。 请查阅代码以查看其他可能的选项。
<colgroup><col> <col></colgroup>
| **目的** | **运行** |
| --- | --- |
| 从零开始训练 REINFORCE | `python3 policygradient-car-10.1.1.py` |
| 从头开始使用基线训练 REINFORCE | `python3 policygradient-car-10.1.1.py -b` |
| 从零开始训练演员批评 | `python3 policygradient-car-10.1.1.py -a` |
| 从零开始训练演员评论家 | `python3 policygradient-car-10.1.1.py -a` |
| 从头开始训练 A2C | `python3 policygradient-car-10.1.1.py -c` |
| 从先前保存的重量中训练 REINFORCE | `python3 policygradient-car-10.1.1.py``--encoder-weights=encoder_weights.h5``--actor-weights=actor_weights.h5 --train` |
| 使用先前保存的权重使用基线训练 REINFORCE | `python3 policygradient-car-10.1.1.py``--encoder-weights=encoder_weights.h5``--actor-weights=actor_weights.h5``--value-weights=value_weights.h5 -b --train` |
| 使用先前保存的权重训练演员批评 | `python3 policygradient-car-10.1.1.py``--encoder-weights=encoder_weights.h5``--actor-weights=actor_weights.h5``--value-weights=value_weights.h5 -a --train` |
| 使用先前保存的权重训练演员评论家 | `python3 policygradient-car-10.1.1.py``--encoder-weights=encoder_weights.h5``--actor-weights=actor_weights.h5``--value-weights=value_weights.h5 -a --train` |
| 使用先前保存的重量训练 A2C | `python3 policygradient-car-10.1.1.py``--encoder-weights=encoder_weights.h5``--actor-weights=actor_weights.h5``--value-weights=value_weights.h5 -c --train` |
表 10.7.1:运行 policygradient-car-10.1.1.py 时的不同选项
......
......@@ -303,6 +303,7 @@ def centroid2minmax(boxes):
在以下有关损失函数的部分中,负锚框不构成偏移损失函数。
| |`B[0]`|
| --- | --- |
|`A[0]`| 0 |
|`A[1]`| 0.32 |
|`A[2]`| 0 |
......@@ -1617,7 +1618,8 @@ python3 ssd-11.6.1.py --restore-weights=ResNet56v2-4layer-extra_anchors-drinks-2
结果如下,在“表 11.13.1”中:
| | **未归一化的偏移量** | **未归一化的偏移,平滑 L1** | **归一化的偏移量** | **归一化偏移,平滑 L1** | **归一化偏移,平滑 L1,焦点损失** |
| | **未归一化的偏移** | **未归一化的偏移,平滑 L1** | **归一化的偏移** | **归一化偏移,平滑 L1** | **归一化偏移,平滑 L1,焦点损失** |
| --- | --- | --- | --- | --- | --- |
| IoU | 0.64 | 0.61 | 0.53 | 0.50 | 0.51 |
| 平均精度 | 0.87 | 0.86 | 0.90 | 0.85 | 0.85 |
| 平均召回率 | 0.87 | 0.85 | 0.87 | 0.83 | 0.83 |
......
......@@ -660,6 +660,7 @@ python3 iic-13.5.1.py --heads=1 --train --save-weights=head1.h5
有时,由于优化似乎停留在局部最小值中,我们不得不多次运行训练。 此外,在多头 IIC 模型中,对于所有头部,我们都无法获得相同水平的性能。“表 13.6.1”报告了最佳性能的头部。
| **头部数** |`1`|`2`|`3`|`4`|`5`|
| --- | --- | --- | --- | --- | --- |
| **精度,%** | 99.49 | 99.47 | 99.54 | 99.52 | 99.53 |
表 13.6.1 不同头数的 IIC 精度
......
......@@ -169,10 +169,11 @@ Cloud Datastore 是 GCP 提供的完全托管的,可扩展的 NoSQL 数据库
* 为了轻松使用数据存储,您应该了解基本术语及其与 RDBMS 的相似性。 这是 RDBMS 和数据存储区术语的比较表:
| | **Datastore** | **RDBMS** |
| --- | --- |
| 对象类别 | 类 | 表 |
| 单一物件 | 实体 | 行 |
| 唯一标识 | 键 | 首要的关键 |
| 个人资料 | 属性 | 领域 |
| 单一对象 | 实体 | 行 |
| 唯一标识 | 键 | 键 |
| 属性信息 | 属性 | 字段 |
如果数据存储与 RDBMS 非常相似,为什么还要使用数据存储? 原因很简单,因为它的可伸缩性是 RDBMS 无法实现的。
......
......@@ -271,6 +271,7 @@ def predict_json(project, model, instances, version=None):
下表包含`users.csv`的示例数据:
| 0 | 50 | 5 | 881250949 |
| --- | --- | --- | --- |
| 0 | 172 | 5 | 881250949 |
| 0 | 133 | 1 | 881250949 |
| 196 | 242 | 3 | 881250949 |
......@@ -284,16 +285,17 @@ def predict_json(project, model, instances, version=None):
下表包含`movie_lens.csv`的示例数据。 这是一个说明性示例。 实际的训练数据可以高达数 GB,一旦我们使用了正确的基础基础架构集,XGBoost 算法就可以有效地训练它:
| **项目 ID** | **标题** |
| 1 | 玩具总动员(1995) |
| 2 | 金眼(1995) |
| 3 | 四房(1995) |
| 4 | 得到矮个子(1995) |
| 5 | 模仿者(1995) |
| 6 | Shanghai Triad (Yao a yao yao dao waipo qiao) (1995) |
| 7 | 十二只猴子(1995) |
| 8 | 宝贝(1995) |
| 9 | 行尸走肉(1995) |
| 10 | 理查三世(1995) |
| --- | --- |
| 1 | Toy Story(1995) |
| 2 | GoldenEye(1995) |
| 3 | Four Rooms(1995) |
| 4 | Get Shorty(1995) |
| 5 | Copycat(1995) |
| 6 | Shanghai Triad (Yao a yao yao dao waipo qiao)(1995) |
| 7 | Twelve Monkeys(1995) |
| 8 | Babe(1995) |
| 9 | Dead Man Walking(1995) |
| 10 | Richard III(1995) |
这些样本文件可用于使用 XGBoost 算法训练和评估模型。 使用非常大的数据集进行训练时,可以显着提高性能。
......
......@@ -50,10 +50,11 @@ RESTful API 被基于 GCP 的 AI 应用程序用来调用 AutoML 服务。 用
在下表中,我们列出了通过模型位置 API 进行的一些基本方法调用。 调用应用程序需要将适当的参数传递给 API 端点,以创建和删除模型并将其用于预测:
| **方法** | **端点** | **说明** | **响应** |
| `create` | POST / v1beta1 / {parent} / models | 创建一个模型 | 完成后在响应字段中返回模型 |
| `delete` | 删除/ v1beta1 / {name} | 删除模型 | 完成后,在响应字段中返回`google.protobuf.Empty`,在元数据字段中返回`deleteDetails` |
| `get` | GET / v1beta1 / {name} | 获取模型 | 如果成功,则响应主体包含模型的实例 |
| `predict` | POST / v1beta1 / {name}:预测 | 执行预测 | |
| --- | --- | --- | --- |
| `create` | POST `/v1beta1/{parent}/models` | 创建一个模型 | 完成后在响应字段中返回模型 |
| `delete` | DELETE `/v1beta1/{name}` | 删除模型 | 完成后,在响应字段中返回`google.protobuf.Empty`,在元数据字段中返回`deleteDetails` |
| `get` | GET `/v1beta1/{name}` | 获取模型 | 如果成功,则响应主体包含模型的实例 |
| `predict` | POST `/v1beta1/{name}/predict` | 预测 | 执行预测 |
让我们看一下可用于调用 API 的实际有效负载。 这是机器学习模型的 JSON 表示形式。 以下代码段描述了关键字段和相应的数据类型:
......@@ -107,8 +108,9 @@ RESTful API 被基于 GCP 的 AI 应用程序用来调用 AutoML 服务。 用
这是获取和列出模型评估的方法调用:
| **方法** | **端点** | **说明** |
| `get` | GET / v1beta1 / {name} | 获得模型评估 |
| `list` | GET / v1beta1 / {parent} / modelEvaluations | 列出模型评估 |
| --- | --- | --- |
| `get` | GET `/v1beta1/{name}` | 获得模型评估 |
| `list` | GET `/v1beta1/{parent}/modelEvaluations` | 列出模型评估 |
可以使用简单的 API 列出模型评估参数,并且可以将其用于调用应用程序中的迭代模型改进。
......@@ -119,11 +121,12 @@ RESTful API 被基于 GCP 的 AI 应用程序用来调用 AutoML 服务。 用
下表列出了`v1beta1.projects.locations.operations` API:
| **方法** | **端点** | **说明** |
| `cancel` | POST / v1beta1 / {name}:取消 | 在长时间运行的操作上启动异步取消 |
| `delete` | 删除/ v1beta1 / {name} | 删除长时间运行的操作 |
| `get` | GET / v1beta1 / {name} | 获取长时间运行的操作的最新状态 |
| `list` | GET / v1beta1 / {name} / operations | 列出与请求中的指定过滤器匹配的操作 |
| `wait` | POST / v1beta1 / {name}:等待 | 等待指定的长时间运行的操作,直到完成或最多达到指定的超时,并返回最新状态 |
| --- | --- | --- |
| `cancel` | POST `/v1beta1/{name}` | 在长时间运行的操作上启动异步取消 |
| `delete` | DELETE `/v1beta1/{name}` | 删除长时间运行的操作 |
| `get` | GET `/v1beta1/{name}` | 获取长时间运行的操作的最新状态 |
| `list` | GET `/v1beta1/{name}/operations` | 列出与请求中的指定过滤器匹配的操作 |
| `wait` | POST `/v1beta1/{name}/wait` | 等待指定的长时间运行的操作,直到完成或最多达到指定的超时,并返回最新状态 |
请注意,对于操作 API 的请求是异步的,并且对于调用应用程序是非阻塞的。 这些对于调用应用程序以报告模型训练和评估的进度很有用。
......@@ -737,17 +740,12 @@ JSON 请求正文中的`config`字段是`RecognitionConfig`对象的体现,其
下表中定义了 JSON 模板中的字段:
| **字段名称** | **类型** | **说明** |
| `encoding` | `enum` | 该字段定义了需要转录的音频文件的编码。 API 支持以下值:
* `ENCODING_UNSPECIFIED`
* `LINEAR16` – 16 位未压缩格式
* **FLAC****免费无损音频编解码器**):这种编码比 LINEAR16 更可靠,并且需要一半的带宽
* `MULAW`/`AMR`(自适应多速率窄带编解码器)/`AMR_WB`(宽带)/`OGG_OPUS`/`SPEEX_WITH_HEADER_BYTE`
|
| --- | --- | --- |
| `encoding` | `enum` | 该字段定义了需要转录的音频文件的编码。 API 支持以下值: |
| | | `ENCODING_UNSPECIFIED` |
| | | `LINEAR16` – 16 位未压缩格式 |
| | | **FLAC****免费无损音频编解码器**):这种编码比 LINEAR16 更可靠,并且需要一半的带宽 |
| | | `MULAW`/`AMR`(自适应多速率窄带编解码器)/`AMR_WB`(宽带)/`OGG_OPUS`/`SPEEX_WITH_HEADER_BYTE` |
| `sampleRateHertz` | `number` | 该字段定义音频数据的采样率。 数据点的范围为 8,000 至 48,000 Hz。 对于 WAV 和 FLAC 音频格式,此字段是可选的。 |
| `audioChannelCount` | `number` | 该字段指示输入音频数据中的多个通道。 |
| `enableSeparateRecognitionPerChannel` | `boolean` | 如果`audioChannelCount`大于 1,则需要将该参数显式设置为`True`。 |
......@@ -758,17 +756,11 @@ JSON 请求正文中的`config`字段是`RecognitionConfig`对象的体现,其
| `enableWordTimeOffsets` | `boolean` | 这是个可选的选项。 如果设置为`true`,则转录语音中的每个单词都将在音频信号中标记其开始和结束时间。 默认情况下,此参数的值为`false`。 |
| `enableAutomaticPunctuation` | `boolean` | 此可选字段仅影响所选的语言,当前可作为实验字段使用。 启用后,转录将包括标点文本。 默认情况下,该参数设置为`false`。 |
| `metadata` | `object` | 这是一个可选字段,提供有关音频信号的元数据。 该字段是`RecognitionMetadata`类型,包含以下子字段:`interactionType`/`industryNaicsCodeOfAudio`/`microphoneDistance`/`originalMediaType`/`recordingDeviceType`/`recordingDeviceName`/`originalMimeType`/`obfuscatedId`/`audioTopic`元数据为模型提供了其他提示,这些提示用于更准确和上下文相关的转录。 |
| `model` | `string` | 这是一个可选字段,用于选择适当的机器学习模型以执行语音到文本的识别。 选择合适的识别模型可以大大提高转录的准确率。 如果未设置模型,则根据`RecognitionConfig`中的参数选择运行时模型。 以下是 GCP 上当前可用型号的列表:
* `command_and_search`:最适合语音命令或语音搜索的模型
* `phone_call`:最适合电话对话转录的模型
* `video`:最适合从原始视频数据中提取音频信号的模型
* `default`:未指定或无法使用特定对话模型时的模型
|
| `model` | `string` | 这是一个可选字段,用于选择适当的机器学习模型以执行语音到文本的识别。 选择合适的识别模型可以大大提高转录的准确率。 如果未设置模型,则根据`RecognitionConfig`中的参数选择运行时模型。 以下是 GCP 上当前可用型号的列表: |
| | | `command_and_search`:最适合语音命令或语音搜索的模型 |
| | | `phone_call`:最适合电话对话转录的模型 |
| | | `video`:最适合从原始视频数据中提取音频信号的模型 |
| | | `default`:未指定或无法使用特定对话模型时的模型 |
| `useEnhanced` | `boolean` | 这是一个可选参数,为使用增强型模型而设置为`true`。 增强型模型比常规模型更准确,成本也更高。 |
通过在请求的`audio`字段中发送`content`参数,可以将音频内容嵌入到请求主体中。 嵌入式内容可以成为 gRPC 或 REST 请求的一部分。 对于 gRPC 请求,音频必须与协议缓冲区版本 3 语言规范兼容,并作为二进制数据嵌入。 在 REST 请求中发送嵌入式音频时,需要对音频进行 JSON 序列化和 Base64 编码。 这是在请求正文中发送 Base64 编码的音频内容的示例:
......
......@@ -187,7 +187,7 @@ DialogFlow 控制台提供了一种快速测试已配置响应的简便方法。
一旦用户知道书店有新来的东西,代理就可以引导对话以查看用户是否感兴趣。 如果是,则可以将意图响应配置为引导用户保留特定书籍的副本以供提取。 为了简化此操作,我们需要从用户的表达式中捕获参数。 到目前为止,这是使用 MyBookStore 代理进行的转换的流程:
| 来电者:你好我的书店代理:您好,感谢您致电我的书店。 我们的营业时间为上午 9 点至下午 6 点。来电者:这个月有什么新来的?我的书店的代理人:这个月我们有三个新来的人。 您想来接下一本书吗?来电者:是的。 我想明天来接。我的书店代理:可以。 你**明天**想什么时间来?来电者:**上午 10 点**。我的书店代理:知道了。 您的约会预定于 **2019 年 12 月 30 日****上午 10 点**进行。 再见。 |
> 来电者:你好我的书店代理:您好,感谢您致电我的书店。 我们的营业时间为上午 9 点至下午 6 点。来电者:这个月有什么新来的?我的书店的代理人:这个月我们有三个新来的人。 您想来接下一本书吗?来电者:是的。 我想明天来接。我的书店代理:可以。 你**明天**想什么时间来?来电者:**上午 10 点**。我的书店代理:知道了。 您的约会预定于 **2019 年 12 月 30 日**在**上午 10 点**进行。 再见。
在这种情况下,用户打算去商店并提到一天。 DialogFlow 代理需要配置为从用户表达式中提取含义。 对于人类来说,从对话中提取有意义的信息是一件容易的事。 但是,机器(DialogFlow)代理需要针对特定​​的对话流进行训练。 要安排商店访问的约会,让我们创建一个名为`Store_Visit`的新意图:
......
......@@ -42,8 +42,9 @@ Cloud ML Engine 具有各种组件,它们执行独特的操作并在机器学
原始的一组机器类型只能用于内置算法。 我们还可以定义需要运行作业的区域。 默认情况下,平台会自动选择合适的区域来运行训练作业。 还可以通过使用所需的学习率和批量大小来完成特定于作业的自定义。 我们可以设置超参数调整的目标阈值,以实现最大的准确率并最小化损失函数的值。 内置算法可在 GCP 共享空间上的容器内使用,可以与特定的**统一资源标识符****URI**)配合使用,如下表所示:
| **算法** | **容器 URI** |
| 线性学习者 | `gcr.io/cloud-ml-algos/linear_learner_cpu:latest``gcr.io/cloud-ml-algos/linear_learner_gpu:latest` |
| 宽而深 | `gcr.io/cloud-ml-algos/wide_deep_learner_cpu:latest``gcr.io/cloud-ml-algos/wide_deep_learner_gpu:latest` |
| --- | --- |
| 线性学习器 | `gcr.io/cloud-ml-algos/linear_learner_cpu:latest``gcr.io/cloud-ml-algos/linear_learner_gpu:latest` |
| 宽深 | `gcr.io/cloud-ml-algos/wide_deep_learner_cpu:latest``gcr.io/cloud-ml-algos/wide_deep_learner_gpu:latest` |
| XGBoost | `gcr.io/cloud-ml-algos/boosted_trees:latest` |
让我们使用内置的线性学习器算法解决一个简单的回归问题。 例如,学生的**学业能力测验****SAT**)分数与**平均绩点****GPA**)分数之间存在已知的相关关系 。 我们将有一个包含两列的示例 CSV 文件。
......@@ -242,14 +243,15 @@ POST https://ml.googleapis.com/v1/{parent=projects/*}/models
让我们看一下下表中的模型参数列表及其描述:
| **参数名称** | **类型** | **必填** | **说明** |
| `name` | 串 | 是 | 这是模型的名称。 模型名称在项目中必须唯一。 |
| `description` | 串 | No | 这是创建模型时的描述。 |
| --- | --- | --- | --- |
| `name` | 字符串 | 是 | 这是模型的名称。 模型名称在项目中必须唯一。 |
| `description` | 字符串 | 否 | 这是创建模型时的描述。 |
| `defaultVersion` | 目的 | 是 | 当未在请求内发送版本信息时,将使用该模型版本。 随着模型的发展,默认版本会不断变化并变得越来越有用。 可以使用`projects.methods`更改为模型版本。 |
| `regions[]` | 字符串数组 | 没有 | 这是模型在其上部署的所有区域的列表。 这是为 AI 平台的将来版本提供的。 在撰写本章时,平台仅支持一个区域。 默认值为`us-central1`。 |
| `onlinePredictionLogging` | 布尔型 | 没有 | 如果设置为`true`,则在线预测日志将发送到 StackDriver Logging。 这些日志类似于服务器访问日志,其中记录了所有请求的请求时间戳和响应时间。 默认情况下,此参数的值为`false`,需要将其显式设置为`true`。 |
| `onlinePredictionConsoleLogging` | 布尔型 | 没有 | 如果设置为`true`,则在线预测日志将以更详细的方式发送到 StackDriver Logging,并包含标准输出以及标准错误日志消息的完整记录。 该日志对于调试很有帮助,但需要谨慎使用以节省成本。 |
| `labels` | 键值对图 | 没有 | Labels help in organizing various resources on the AI Platform. These labels are the key-value strings that can have arbitrary values. The labeled resources are easy to monitor and group together. We can supply a maximum of 64 labels. The keys and values can have a maximum of 63 characters. The keys must start with a letter and can contain alphanumeric characters, underscores, and dashes. |
| `etag` | String | 是 | 该标志用于防止两个独立模型更新之间的竞争状况。 需要在各种请求和响应之间以链接的方式使用`etag`参数,以确保对模型进行顺序更新。 建议有效使用`etag`,以避免模型版本不一致。 |
| `regions[]` | 字符串数组 | | 这是模型在其上部署的所有区域的列表。 这是为 AI 平台的将来版本提供的。 在撰写本章时,平台仅支持一个区域。 默认值为`us-central1`。 |
| `onlinePredictionLogging` | 布尔型 | | 如果设置为`true`,则在线预测日志将发送到 StackDriver Logging。 这些日志类似于服务器访问日志,其中记录了所有请求的请求时间戳和响应时间。 默认情况下,此参数的值为`false`,需要将其显式设置为`true`。 |
| `onlinePredictionConsoleLogging` | 布尔型 | | 如果设置为`true`,则在线预测日志将以更详细的方式发送到 StackDriver Logging,并包含标准输出以及标准错误日志消息的完整记录。 该日志对于调试很有帮助,但需要谨慎使用以节省成本。 |
| `labels` | 键值对映射 | 否 | 标签有助于组织 AI 平台上的各种资源。 这些标签是可以具有任意值的键值字符串。 带标签的资源易于监视和分组。 我们最多可以提供 64 个标签。 键和值最多可以包含 63 个字符。 键必须以字母开头,并且可以包含字母数字字符,下划线和破折号。 |
| `etag` | 字符串 | 是 | 该标志用于防止两个独立模型更新之间的竞争状况。 需要在各种请求和响应之间以链接的方式使用`etag`参数,以确保对模型进行顺序更新。 建议有效使用`etag`,以避免模型版本不一致。 |
除了创建模型之外,相同的请求主体对象还可用于以下功能:
......@@ -666,6 +668,7 @@ setup(
用于训练的 GPU 的限制如下:
| **GPU 类型** | **并行 GCP(训练)** | **并行 GPU(预测)** |
| --- | --- | --- |
| Tesla K80 | 30 | 30 |
| Tesla P4 | 8 | 2 |
| Tesla P100 | 30 | 30 |
......
......@@ -50,6 +50,7 @@
通常,可以根据要求准备在线预测。 下表总结了在线预测和批量预测之间的区别。
| **批量预测** | **在线预测** |
| --- | --- |
| 适用于具有复杂计算要求的海量大数据量。 | 适用于一次记录,具有低延迟和较简单的模型。 |
| 输出是具有多个预测结果的文件格式。 | 输出一次是一个响应,大多数为 JSON 格式。 |
| 异步请求和响应。 | 同步实时请求和响应。 |
......
......@@ -351,6 +351,7 @@ DBN 也有许多有趣的应用程序,例如:
训练数据集的大小为`6,040 x 3,706`,每行包含`3706`缩放等级,包括`0.0`,表示未分级。 可以将其显示为下表(虚拟)以获得更直观的视图:
| | `movie_0` | `movie_1` | `movie_2` | ... | ... | `movie_n` |
| --- | --- | --- | --- | --- | --- | --- |
| `user_0` | `0.0` | `0.2` | `0.8` | `0.0` | `1.0` | `0.0` |
| `user_1` | `0.8` | `0.0` | `0.6` | `1.0` | `0.0` | `0.0` |
| `user_2` | `0.0` | `0.0` | `1.0` | `1.0` | `0.8` | `0.0` |
......
......@@ -296,6 +296,7 @@ print(output)
MobileNetV2 对 MobileNet 的架构进行了重大更改。 这些更改值得吗? 在性能方面,MobileNetV2 比 MobileNet 好多少? 我们可以根据一次推理所需的乘法运算数量来比较模型,这通常称为 **MAC**(乘法累加数)。 MAC 值越高,网络越重。 我们还可以根据模型中的参数数量来比较模型。 下表显示了 MobileNet 和 MobileNetV2 的 MAC 和参数数:
| **网络** | **参数数** | **MAC** |
| --- | --- | --- |
| MobileNet V1 | 420 万 | 575M |
| MobileNet V2 | 340 万 | 300M |
......
......@@ -155,6 +155,7 @@ Total vocabulary (unique characters): 57
接下来,我们以相同的方式将原始文本数据拆分为序列,但是这次从第二个字符开始。 每个结果序列都是训练样本的输出。 例如,给定原始文本`deep learning architectures``5`作为序列长度,我们可以创建五个训练样本,如下所示:
| **输入** | **输出** |
| --- | --- |
| `deep_` | `eep_l` |
| `learn` | `earni` |
| `ing_a` | `ng_ar` |
......@@ -623,6 +624,7 @@ DJIA 由 30 只大型和重要股票(例如 Apple,IBM,GE 和 Goldman Sachs
将价格时间序列表示为`x[1]``x[2]`,...,`x[n]``N = 4276`),并以`T = 5`为例。 通过这样做,我们可以创建训练样本,如下所示:
| **输入** | **输出** |
| --- | --- |
| `{x[1], x[2], x[3], x[4], x[5]}` | `x[6]` |
| `{x[2], x[3], x[4], x[5], x[6]}` | `x[7]` |
| `{x[3], x[4], x[5], x[6], x[7]}` | `x[8]` |
......@@ -660,9 +662,10 @@ DJIA 由 30 只大型和重要股票(例如 Apple,IBM,GE 和 Goldman Sachs
我们现在可以开始对训练数据进行建模吗? 当然不需要-需要数据缩放或预处理。 从上图可以看出,测试数据与训练数据不成比例,更不用说将来的数据了。 回归模型无法预测超出范围的值。 为了解决这个问题,我们通常使用最大最小缩放 ![](img/59f9afb3-b83d-4d93-9481-eb6595fafe7d.png)将数据缩放到给定范围,例如 0 到 1。 但是,没有可靠的方法来预测股票的![](img/c83a79f1-f415-4cce-9ff7-dfb8ea639122.png)(或![](img/07311e70-4ece-4170-8c85-d492a7815b82.png))。 这与已知最小值和最大值(例如,图像预测中的 0 和 255)的情况不同。 为了解决这个问题,我们将每个窗口内的价格标准化。 我们只需将时间窗口中的每个价格除以最近的已知价格即可。 再次使用前面的`T = 5`示例,我们可以如下预处理训练样本:
| **输入** | **输出** |
| --- | --- |
| ![](img/56e83be1-8079-4a8a-881c-0882cd25ba4b.png) | ![](img/a0ac7583-e8c0-4766-a2a4-a27c2dd2dceb.png) |
| ![](img/788e734a-706d-42c8-9275-b30b24b00e91.png) | ![](img/0967eb5b-f561-4d03-85fd-c8a80f160c60.png) ![](img/e979f124-d998-479d-bf8c-bb82bc76dbb3.png) |
| ![](img/d409f6b4-d088-4055-830d-7db5c56ca9c7.png) | ![](img/0be5c724-5d9c-4c72-a091-c79fe997ce15.png) ![](img/6ea4abfa-8e60-4c19-ab3f-1d0abe3440bc.png) |
| ![](img/788e734a-706d-42c8-9275-b30b24b00e91.png) | ![](img/0967eb5b-f561-4d03-85fd-c8a80f160c60.png) |
| ![](img/d409f6b4-d088-4055-830d-7db5c56ca9c7.png) | ![](img/6ea4abfa-8e60-4c19-ab3f-1d0abe3440bc.png) |
| ...... | ... |
| ![](img/b96e30bb-3650-4a7c-80b7-77050aee2097.png) | ![](img/be9ead53-baa8-4357-8db1-9b3505882ec4.png) |
......
......@@ -47,6 +47,7 @@
在硬件方面,本书假设计算机上有麦克风,扬声器和网络摄像头。
| 书中介绍的软件/硬件 | **操作系统要求** |
| --- | --- |
| Anaconda 发布的 Python 和其他 Python 软件包 | 最低 1 GB RAM,建议 8 GB15 GB 磁盘空间 |
| 您选择的代码编辑器(建议使用 Sublime Text 3) | 2 GB 内存 |
......
......@@ -202,6 +202,7 @@ print(test_labels[0])
训练数据集包含 60,000 张图像,尺寸为`60,000 x 784`,其中每张图像为`28 x 28`像素。 样本在数字之间的分布如下:
| **序号** | **样本数** | **序号** | **样本数** |
| --- | --- | --- | --- |
| 0 | 5,923 | 5 | 5,421 |
| 1 | 6,742 | 6 | 5,918 |
| 2 | 5,958 | 7 | 6,265 |
......@@ -215,6 +216,7 @@ print(test_labels[0])
同样,在测试数据集上,我们有 10,000 个图像和标签,样本数量的分布如下:
| **序号** | **样本数** | **序号** | **样本数** |
| --- | --- | --- | --- |
| 0 | 980 | 5 | 892 |
| 1 | 1,135 | 6 | 958 |
| 2 | 1,032 | 7 | 1,028 |
......
......@@ -94,29 +94,30 @@ API 除了在需要快速生产或最小工作量的产品演示时为您节省
下表汇总了一些业内使用最广泛的深度学习 API:
| **提供者** | **API** | **分组** |
| --- | --- | --- |
| 谷歌 | 视觉 API | 计算机视觉和图像处理 |
| 视频智能 API |
| 自然语言 API | 自然语言处理 |
| 语音转文字 API |
| 文字转语音 API |
| 翻译 API |
| Dialogflow API |
| 脸书 | 密集姿势 | 计算机视觉和图像处理 |
| 侦探 |
| 亚马孙 | 亚马逊认可 | 计算机视觉和图像处理 |
| 亚马逊理解 | 自然语言处理 |
| 亚马逊 Textract |
| 亚马逊波莉 |
| 亚马逊翻译 |
| 亚马逊转录 |
| | 视频智能 API |
| | 自然语言 API | 自然语言处理 |
| | 语音转文字 API |
| | 文字转语音 API |
| | 翻译 API |
| | Dialogflow API |
| 脸书 | DensePose | 计算机视觉和图像处理 |
| | Detectron |
| 亚马逊 | 亚马逊 Rekognition | 计算机视觉和图像处理 |
| | 亚马逊 Comprehend | 自然语言处理 |
| | 亚马逊 Textract |
| | 亚马逊 Polly |
| | 亚马逊翻译 |
| | 亚马逊转写 |
| 微软 | 计算机视觉 | 计算机视觉和图像处理 |
| 视频索引器 |
| 面对 |
| 内容主持人 |
| 文字分析 | 自然语言处理 |
| 必应拼写检查 |
| 翻译文字 |
| 语言理解 |
| | 视频索引器 |
| | 人脸 |
| | 内容主持人 |
| | 文字分析 | 自然语言处理 |
| | 必应拼写检查 |
| | 翻译文字 |
| | 语言理解 |
上表中显示的 API 是使用经过良好测试和可扩展的深度学习 API 时最受欢迎的 API。 但是,还有一些其他名称尚未像这些名称一样流行。 在下一节中,我们将研究它们。
......@@ -125,15 +126,16 @@ API 除了在需要快速生产或最小工作量的产品演示时为您节省
下表提供了一些鲜为人知的 API 的一些详细信息:
| **提供者** | **API** | **组** |
| --- | --- | --- |
| 沃森 | 沃森虚拟识别 | 计算机视觉和图像处理 |
| 屈臣氏文字转语音 | 自然语言处理 |
| 沃森自然语言分类器 |
| 沃森对话 |
| 沃森自然语言理解 |
| 美国电话电报公司 | AT&T 演讲 | 自然语言处理 |
| Wit.ai | 言语 | 自然语言处理 |
| 信息 |
| 实体 |
| | 沃森文字转语音 | 自然语言处理 |
| | 沃森自然语言分类器 |
| | 沃森对话 |
| | 沃森自然语言理解 |
| AT&T | AT&T 演讲 | 自然语言处理 |
| Wit.ai | 演讲 | 自然语言处理 |
| | 信息 |
| | 实体 |
现在,在这片(几乎是全部)API 中,您如何选择用于特定任务的特定提供者? 这可能很棘手,需要进行讨论。 在本节中,我们将讨论可以有效帮助我们做出这些决策的一些策略。
......
......@@ -44,6 +44,7 @@ SSD 的主要功能概述如下:
* 一组默认框与每个要素图单元相关联,因此默认框位置相对于要素图单元是固定的。 每个默认框都会预测`c`类中每个类别的得分以及相对于地面真实情况的四个偏移,从而产生`(c + 4)k`过滤器。 这些过滤器应用于特征图(大小为`m x n`),产生`(c + 4)kmn`输出。 下表说明了这一点。 SSD 的独特之处在于默认框适用于不同分辨率的多个功能图:
| **层名称** | **检测** | **过滤器输出** |
| --- | --- | --- |
| `Conv4_3` | `38 x 38 x 4 = 5776` | `3 x 3 x 4 x (c + 4)` |
| `Conv7` | `19 x 19 x 6 = 2166` | `3 x 3 x 6 x (c + 4)` |
| `Conv8_2` | `10 x 10 x 6 = 600` | `3 x 3 x 6 x (c + 4)` |
......@@ -151,10 +152,11 @@ TensorFlow 对象检测 API 具有预先训练的模型,[您可以使用网络
在本练习中,我们将使用 TensorFlow 对象检测 API 使用四种不同的模型训练自定义对象检测器。 **Google Colab** 是在 Google 服务器上运行的 VM,因此 TensorFlow 的所有软件包都得到了适当的维护和更新:
| **序号** | **模型** | **特征提取器** |
| --- | --- | --- |
| 1 | 更快的 R-CNN | Inception |
| 2 | SSD | MobileNet |
| 3 | SSD | Inception |
| 4 | 流式细胞仪 | ResNet-101 |
| 4 | R-FCN | ResNet-101 |
请注意,在撰写本书时,TensorFlow 对象检测 API 尚未迁移到 TensorFlow 2.x,因此请在 Google Colab 默认版本 TensorFlow 1.x 上运行此示例。 您可以通过键入`%tensorflow_version 2.x`在 Google Colab 中安装 TensorFlow 2.x,但是对象检测 API 会导致错误。 该演示练习安装了 TenorFlow 1.14 版和 numpy 1.16 版。
......
......@@ -44,13 +44,14 @@
下表总结了前面列出的各种边缘设备的性能规格。 您可以使用此表来确定选择过程:
| **装置** | **GPU** | **CPU** | **内存** | **加速器** |
| --- | --- | --- | --- | --- |
| NVIDIA Jetson Nano 69 毫米 x 45 毫米 | 128 核 NVIDIA Maxwell | 四核 ARM Cortex A57 | 4 GB RAM,16 GB 存储 | 并行处理器 |
| Raspberry Pi 4 8​​5 毫米 x 56 毫米 | | 1.5 GHz 时的 ARM Cortex A72 | 4 GB RAM,32 GB 存储 | |
| 珊瑚开发板 48 毫米 x 40 毫米 | 集成的 GC7000 Lite 图形 | 四核 Cortex-A53,加上 Cortex-M4F | 1 GB LPDDR4 | Google Edge TPU ML 加速器协处理器 |
| 橙色 Pi 85 毫米 x 55 毫米 | ARM Mali-400 MP2 GPU @ 600MHz | 4 个 Cortex-A7 @ 1.6 GHz | 1 GB DDR3 SDRAM | |
| ORDOID C2 85 毫米 x 56 毫米 | 马里 450MP3 | ARM Cortex-A53 四核 @ 1.5 GHz | 2 GB DDR3 SDRAM | |
| Coral 开发板 48 毫米 x 40 毫米 | 集成的 GC7000 Lite 图形 | 四核 Cortex-A53,加上 Cortex-M4F | 1 GB LPDDR4 | Google Edge TPU ML 加速器协处理器 |
| Orange Pi 85 毫米 x 55 毫米 | ARM Mali-400 MP2 GPU @ 600MHz | 4 个 Cortex-A7 @ 1.6 GHz | 1 GB DDR3 SDRAM | |
| ORDOID C2 85 毫米 x 56 毫米 | Mali 450MP3 | ARM Cortex-A53 四核 @ 1.5 GHz | 2 GB DDR3 SDRAM | |
| 英特尔神经网络棒 | 英特尔 Movidius Myriad X **视觉处理单元****VPU**),具有 16 个处理核心和一个网络硬件加速器 | 英特尔 OpenVINO 工具包 | | |
| 珊瑚 USB 加速器 | Google Edge TPU ML 加速器协处理器,支持 AUTOML Vision Edge | TensorFlow Lite 模型支持 | | |
| Coral USB 加速器 | Google Edge TPU ML 加速器协处理器,支持 AUTOML Vision Edge | TensorFlow Lite 模型支持 | | |
| Android Pixel XL 155 毫米 x 76 毫米 | Ardeno 530 | 2 个 2.15 GHz Kryo 和 2 个 1.6 GHz Kryo | 4 GB 内存 | |
| iPhone XR 155 毫米 x 76 毫米 | A12 仿生芯片 | A12 仿生芯片 | 3 GB 内存 | |
......
......@@ -82,8 +82,7 @@ model = Sequential()
下表描述了不同 AlexNet 模型层的 TensorFlow 代码。 在随后的部分中,将介绍其他模型,但是创建模型的基本思想是相似的:
| **卷积和合并 1** | **卷积和合并 5** |
|
**卷积和合并 1**
```py
model.add(Conv2D(96, (11, 11), input_shape=x_train.shape[1:],
......@@ -93,7 +92,7 @@ model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2))
```
|
**卷积和合并 5**
```py
model.add(ZeroPadding2D((1, 1)))
......@@ -103,9 +102,7 @@ model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
```
|
| **卷积和合并 2** | **全连接 1** |
|
**卷积和合并 2**
```py
model.add(Conv2D(256, (5, 5), padding='same'))
......@@ -114,7 +111,7 @@ model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
```
|
**全连接 1**
```py
model.add(Flatten())
......@@ -124,9 +121,7 @@ model.add(Activation('relu'))
model.add(Dropout(0.5))
```
|
| **卷积和合并 3** | **全连接 2** |
|
**卷积和合并 3**
```py
model.add(ZeroPadding2D((1, 1)))
......@@ -136,7 +131,7 @@ model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
```
|
**全连接 2**
```py
model.add(Dense(4096))
......@@ -145,9 +140,7 @@ model.add(Activation('relu'))
model.add(Dropout(0.5))
```
|
| **卷积和合并 4** | **全连接 3** |
|
**卷积和合并 4**
```py
model.add(ZeroPadding2D((1, 1)))
......@@ -156,7 +149,7 @@ model.add(BatchNormalization())
model.add(Activation('relu'))
```
|
**全连接 3**
```py
model.add(Dense(num_classes))
......@@ -164,8 +157,6 @@ model.add(BatchNormalization())
model.add(Activation('softmax'))
```
|
下表描述了关键模型配置参数。 这应该为您概要概述需要优化以训练神经网络模型的参数:
* **模型编译**:一旦开发了模型,下一步就是使用 TensorFlow 编译模型。 对于模型编译,我们需要定义两个参数:
......@@ -371,6 +362,7 @@ R-CNN 在对象检测方面比以前的任何一种方法都有了更显着的
所有网络权重都使用反向传播进行训练,并且在前向和后向路径之间共享计算和内存,以进行损耗和权重计算; 这将大型网络中的训练时间从 84 小时(R-CNN)减少到 9.5 小时(快速 R-CNN)。 快速 R-CNN 使用 softmax 分类器代替 SVM(R-CNN)。 下表针对小型(S),中型(M)和大型(L)网络显示 softmax 的平均平均精度略胜于 SVM 的平均精度:
| **VOC07​​** |`S`|`M`|`L`|
| --- | --- | --- | --- |
| **SVM** | 56.3 | 58.7 | 66.8 |
| **Softmax** | 57.1 | 59.2 | 66.9 |
......@@ -426,6 +418,7 @@ R-CNN 和 Fast R-CNN 都依赖于选择性搜索方法来开发 2,000 个区域
下表显示了 R-CNN,快速 R-CNN 和更快的 R-CNN 之间的比较:
| **参数** | **R-CNN** | **快速 R-CNN** | **更快的 R-CNN** |
| --- | --- | --- | --- |
| 输入值 | 图片 | 图片 | 图片 |
| 输入图像处理 | 基于像素相似度的图像分割 | 输入图像被馈送到 CNN 以生成卷积特征图。 | 输入图像被馈送到 CNN 以生成卷积特征图。 |
| 区域提议 | 使用选择性搜索在分割的图像上生成 2K 区域提议。 | 使用卷积特征图的选择性搜索生成 2K 区域提议。 | 区域提议是使用**区域提议网络****RPN**)生成的。 这个 CNN 使用`60 x 40`的滑动窗口,用于带有 9 个锚点框(3 个比例和 3 个宽高比)的要素地图的每个位置。 |
......
......@@ -145,14 +145,15 @@ plt.show()
为了验证模型,将九张不同的图像存储在目录中,并逐个通过每个模型以生成预测。 下表显示了使用三种不同的神经网络模型对每个目标图像的最终预测输出:
| **目标图片** | **VGG16** | **ResNet** | **Inception** |
| --- | --- | --- | --- |
| 餐桌 | 餐桌 58% | 台球桌 30.1% | 桌子 51% |
| 炒锅 | 钢包 55% | 钢包 87% | 钢包 30% |
| 沙发 | 单人沙发 42% | 单人沙发 77% | 单人沙发 58% |
| 床 | 单室沙发 35% | 四海报 53% | 单室沙发 44% |
| 沙发 | 单人沙发 42% | 单人沙发 77% | 单人沙发 58% |
| 床 | 单人沙发 35% | 四海报 53% | 单人沙发 44% |
| 水壶 | 水壶 93% | 水壶 77% | 水壶 98% |
| 行李 | 折叠椅 39% | 背包 66% | 邮袋 35% |
| 背包 | 背包 99.9% | 背包 99.9% | 背包 66% |
| 长椅 | 单人沙发 79% | 单沙发 20% | 单人沙发 48% |
| 长椅 | 单人沙发 79% | 单沙发 20% | 单人沙发 48% |
| 越野车 | 小型货车 74% | 小型货车 98% | 小型货车 52% |
下图显示了九个类的 VGG16 输出:
......
......@@ -80,12 +80,14 @@ YOLO v3 的最重要的功能是它的检测机制,它是在三种不同的规
下表显示了 YOLO 和 Faster R-CNN 之间的相似之处:
| **YOLO** | **R-CNN** |
| --- | --- |
| 预测每个网格单元的边界框。 | 选择性搜索会为每个区域提议(实际上是一个网格单元)生成边界框。 |
| 使用边界框回归。 | 使用边界框回归。 |
下表显示了 YOLO 和 Faster R-CNN 之间的区别:
| **YOLO** | **R-CNN** |
| --- | --- |
| 分类和边界框回归同时发生。 | 选择性搜索会为每个区域提议生成一个边界框-这些是单独的事件。 |
| 每个图像 98 个边界框。 | 每个图像约有 2,000 个区域提议边界框。 |
| 每个网格单元 2 个锚点。 | 每个网格单元 9 个锚点。 |
......@@ -368,9 +370,10 @@ data/dog.jpg: Predicted in 0.130953 seconds.
下表总结了两种不同图像尺寸的输出:
| **层** | **608 尺寸** | **416 尺寸** |
| 82 | 19 x 19 | 13 x 13 |
| 94 | 38 x 38 | 26 x 26 |
| 106 | 76 x 76 | 52 x 52 |
| --- | --- | --- |
| 82 | `19 x 19` | `13 x 13` |
| 94 | `38 x 38` | `26 x 26` |
| 106 | `76 x 76` | `52 x 52` |
注意,原始图像尺寸和第 82 层输出尺寸之间的比率保持为 32。 到目前为止,我们已经比较了使用 Darknet 和 Tiny Darknet 的推论。 现在,我们将比较不同的 YOLO 模型。
......@@ -379,10 +382,11 @@ data/dog.jpg: Predicted in 0.130953 seconds.
下表显示了三种 YOLO 版本的比较:
| | **YOLO** | **YOLO v2** | **YOLO v3** |
| 输入尺寸 | 224 x 224 | 448 x 448 | |
| 构架 | Darknet 在 ImageNet 上接受了训练-1,000。 | Darknet-1919 个卷积层和 5 个最大池化层。 | Darknet-5353 个卷积层。 为了进行检测,增加了 53 层,总共有 106 层。 |
| --- | --- | --- | --- |
| 输入尺寸 | `224 x 224` | `448 x 448` | |
| 构架 | Darknet 在 ImageNet-1,000 上接受了训练。 | Darknet-19,19 个卷积层和 5 个最大池化层。 | Darknet-53,53 个卷积层。 为了进行检测,增加了 53 层,总共有 106 层。 |
| 小尺寸检测 | 它找不到小图像。 | 在检测小图像方面比 YOLO 更好。 | 在小图像检测方面优于 YOLO v2。 |
| | | 使用锚框。 | 使用剩余块。 |
| | | 使用锚框。 | 使用残差块。 |
下图比较了 YOLO v2 和 YOLO v3 的架构:
......@@ -511,9 +515,10 @@ backup = backup
12. 609、693、777 行。这些是蒙版。 他们指定我们需要选择哪些锚框进行训练。 如果较低级别的值为`0, 1, 2`,并且您在区域`94`和`106`的输出中继续观察到`NaN`,请考虑增加该值。 选择该值的最佳方法是查看训练图像边界框从最小到最大图像的比例,了解它们的下落位置,并选择适当的蒙版来表示。 在我们的测试案例中,最小尺寸的边界框从`62, 45, 40`开始,因此我们选择`5, 6, 7`作为最小值。 下表显示了蒙版的默认值和调整后的值:
| **默认值** | **调整值** |
| 6, 7, 8 | 7, 8, 9 |
| 3, 4, 5 | 6, 7, 8 |
| 0, 1, 2 | 6, 7, 8 |
| --- | --- |
| `6, 7, 8` | `7, 8, 9` |
| `3, 4, 5` | `6, 7, 8` |
| `0, 1, 2` | `6, 7, 8` |
`9`的最大值表示`bed`,并且`6`的最小值表示`chair`。
......
......@@ -18,6 +18,7 @@
DeepLab 于 2015 年开始使用 V1,并于 2019 年迅速移至 V3+。下表列出了不同 DeepLab 版本的比较:
| | **DeepLab V1** | **DeepLab V2** | **DeepLab V3** | **DeepLab V3+** |
| --- | --- | --- | --- | --- |
| **论文** | 《具有深度卷积网络和全连接 CRF 的语义图像分割》,2015 | 《DeepLab:使用深度卷积网络,空洞卷积和全连接 CRF 进行语义图像分割》,2017 | 《重新思考原子卷积以进行语义图像分割》,2017 | 《具有可分割卷积的语义语义分割的编解码器》,2018 |
| **作者** | 陈良杰,乔治·帕潘德里欧,Iasonas Kokkinos,凯文·墨菲和艾伦·尤里 | 陈良杰,乔治·帕潘德里欧,Iasonas Kokkinos,凯文·墨菲和艾伦·尤里 | 陈良杰,乔治·帕潘德里欧,弗洛里安·施罗夫和哈特维格·亚当 | 陈良杰,朱玉坤,乔治·帕潘德里欧,弗洛里安·施罗和哈特维格·亚当 |
| **关键概念** | 原子卷积,全连接**条件随机场****CRF**) | **多孔空间金字塔池****ASPP**) | ASPP,图像级功能和批量规范化 | ASPP 和编码器/解码器模块 |
......
......@@ -457,7 +457,8 @@ PoseNet 基于 Google 的两篇论文。 一种使用自上而下的方法,而
尽管自上而下和自下而上的方法使用 ResNet-101 模型,但 PoseNet 模型使用 MobileNetV1 或 ResNet-50。 下表说明了它们之间的区别:
| | **MobileNet V1** | **ResNet 50** |
| **步幅** | 16 | 32 |
| --- | --- | --- |
| **跨步** | 16 | 32 |
| **输入分辨率** | 宽度:640,高度:480 | 宽度:257,高度:200 |
PoseNet 网站说明了如何调整模型参数。 可以使用以下屏幕快照中显示的参数窗口来调整模型参数:
......
......@@ -39,6 +39,7 @@
您需要在本地系统上有效的 Python 3.5+ 安装。 将 Python 作为 Anaconda 发行版的一部分进行安装是一个好主意。 要构建移动应用程序,您需要有效安装 Flutter 2.0+。 此外,整本书中通常会同时需要 TensorFlow 1.x 和 2.x。 因此,必须具有两个 Anaconda 环境:
| 书中涵盖的软件/硬件 | **操作系统要求** |
| --- | --- |
| Jupyter 笔记本 | 带有更新的网络浏览器(最好是 Google Chrome/Mozilla Firefox/Apple Safari)的任何操作系统。最低 RAM 要求:4 GB; 但是,建议使用 8 GB。 |
| Microsoft Visual Studio 代码 | 任何具有 4 GB 以上 RAM 的操作系统; 但是,建议使用 8 GB。 |
| 具有开发人员访问权限的智能手机 | 具有至少 2 GB RAM 的 Android/iOS; 但是,建议使用 3 GB。 |
......
......@@ -534,6 +534,7 @@ app.run(host="0.0.0.0", port="8080")
6. 单击“提示”以弹出 Droplet 创建表单。 选择下表中描述的选项:
| **字段** | **说明** | **要使用的值** |
| --- | --- | --- |
| 选择一张图片 | Droplet 将在其上运行的操作系统。 | Ubuntu 18.04(或最新可用版本) |
| 选择一个计划 | 选择 Droplet 的配置。 | 4 GB RAM 或更高 |
| 添加块存储 | Droplet 的其他持久性,可拆卸存储容量。 | 保留默认值 |
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册