提交 b4fda85e 编写于 作者: W wizardforcel

2020-09-05 16:11:03

上级 8b814b19
......@@ -24,7 +24,7 @@
第 8 章,“生成模型”讨论了关于出于各种目的生成合成图像的问题。 读者将了解什么是生成模型,并将其用于图像生成应用,例如样式转换,训练数据等。
第 9 章,“视频分类”涵盖了用于视频数据的计算机视觉技术。 读者将了解解决视频与图像问题之间的主要区别,并实视频分类技术。
第 9 章,“视频分类”涵盖了用于视频数据的计算机视觉技术。 读者将了解解决视频与图像问题之间的主要区别,并实视频分类技术。
第 10 章,“部署”讨论了深度学习模型的部署步骤。 读者将学习如何在各种平台上部署训练有素的模型并优化速度。
......
......@@ -53,9 +53,9 @@ ReLu 可以让大量数字通过。 这会使一些神经元陈旧,并且它
# 人工神经网络(ANN)
ANN 是感知机和[H​​TG0]功能的集合。 感知机连接形成隐藏的层或单元。 隐藏的单元形成了将低层空间中的输入层映射到输出层的非线性基础,这也称为人工神经网络。 ANN 是从输入到输出的映射。 该图是通过将输入与偏差进行加权相加来计算的。 权重和偏值以及体系结构称为`model`
ANN 是感知机和[H​​TG0]功能的集合。 感知机连接形成隐藏的层或单元。 隐藏的单元形成了将低层空间中的输入层映射到输出层的非线性基础,这也称为人工神经网络。 ANN 是从输入到输出的映射。 该图是通过将输入与偏差进行加权相加来计算的。 权重和偏值以及体系结构称为`model`
训练过程确定这些权重和偏的值。 在训练开始时,使用随机值初始化模型值。 通过使用损失函数将误差与基本事实进行对比来计算误差。 根据计算出的损耗,在每一步调整权重。 如果无法进一步减少错误,则停止训练。 训练过程会在训练过程中学习功能。 这些特征比原始图像更好地表示。 以下是人工神经网络或多层感知机的示意图:
训练过程确定这些权重和偏的值。 在训练开始时,使用随机值初始化模型值。 通过使用损失函数将误差与基本事实进行对比来计算误差。 根据计算出的损耗,在每一步调整权重。 如果无法进一步减少错误,则停止训练。 训练过程会在训练过程中学习功能。 这些特征比原始图像更好地表示。 以下是人工神经网络或多层感知机的示意图:
![](img/386212ca-7e62-482c-b6b3-d0d30426ca19.png)
......@@ -73,7 +73,7 @@ Softmax 是一种强制神经网络输出 1 之和的方法。因此,`softmax`
交叉熵比较 softmax 和一键编码输出之间的距离。 交叉熵是一种损失函数,必须将其误差降至最低。 神经网络估计每个类别给定数据的概率。 必须将概率最大化到正确的目标标签。 交叉熵是负对数概率的总和。 对数值用于数值稳定性。 最大化一个功能等同于最小化相同功能的负数。 在下一节中,我们将看到以下正则化方法,以避免 ANN 的过拟合:
* 退出
* 丢弃法
* 批量规范化
* L1 和 L2 归一化
......@@ -87,7 +87,7 @@ Softmax 是一种强制神经网络输出 1 之和的方法。因此,`softmax`
# 批量规范化
处理规范化或批处理规范可提高神经网络训练的稳定性和性能。 它将平均值为零且标准偏差为 1 的图层的输出归一化。这减少了过拟合,并使网络训练更快。 这对于训练复杂的神经网络非常有用。
量规范化或批量规范可提高神经网络训练的稳定性和性能。 它将平均值为零且标准偏差为 1 的层的输出归一化。这减少了过拟合,并使网络训练更快。 这对于训练复杂的神经网络非常有用。
# L1 和 L2 正则化
......@@ -131,7 +131,7 @@ TensorFlow 游乐场中的仪表板
# 卷积神经网络
**卷积神经网络****CNN**)与前面各节中描述的神经网络相似。 CNN 具有权重,偏差和通过非线性激活产生的输出。 规则的神经网络接受输入,并且神经元完全连接到下一层。 同一层中的神经元不共享任何连接。 如果我们对图像使用常规的神经网络,由于神经元数量众多,它们的大小将非常大,从而导致过拟合。 我们不能将其用于图像,因为图像尺寸较大。 增加模型大小,因为它需要大量的神经元。 可以将图像视为具有高度,宽度和深度尺寸的体积。 深度是图像的通道,它是红色,蓝色和绿色。 CNN 的神经元以体积方式排列,以利用体积。 每个层都将输入体积转换为输出体积,如下图所示:
**卷积神经网络****CNN**)与前面各节中描述的神经网络相似。 CNN 具有权重,偏差和通过非线性激活产生的输出。 规则的神经网络接受输入,并且神经元完全连接到下一层。 同一层中的神经元不共享任何连接。 如果我们对图像使用常规的神经网络,由于神经元数量众多,它们的大小将非常大,从而导致过拟合。 我们不能将其用于图像,因为图像尺寸较大。 增加模型大小,因为它需要大量的神经元。 可以将图像视为具有高度,宽度和深度尺寸的体积。 深度是图像的通道,它是红色,蓝色和绿色。 CNN 的神经元以体积方式排列,以利用体积。 每个层都将输入体积转换为输出体积,如下图所示:
![](img/42b70af2-d682-4f56-8b6c-fe90ac4a02c9.jpeg)
......@@ -159,7 +159,7 @@ CNN 是任何计算机视觉深度学习模型中最重要的组成部分。 毫
# 循环神经网络(RNN)
**循环神经网络****RNN**)可以对顺序信息进行建模。 他们不假定数据点密集。 它们从一系列序列数据的先前数据的输出执行相同的任务。 这也可以被视为记忆。 RNN 无法记住更长的序列或更长的时间。 在培训过程中将其展开,如下图所示:
**循环神经网络****RNN**)可以对顺序信息进行建模。 他们不假定数据点密集。 它们从一系列序列数据的先前数据的输出执行相同的任务。 这也可以被视为记忆。 RNN 无法记住更长的序列或更长的时间。 在训练过程中将其展开,如下图所示:
![](img/74621d85-d8ff-4532-a793-8eda53ef7651.png)
......@@ -236,11 +236,11 @@ LSTM 有几个门:忘记,输入和输出。 忘记门保持信息先前的
# 硬件和操作系统 - OS
对于开发环境,您需要具有很多计算能力,因为培训在计算上非常昂贵。 Mac 用户相当受限于计算能力。 Windows 和 Ubuntu 用户可以使用更多处理器和**通用图形处理单元****GP-GPU**),来增强其开发环境。 下一节将对此进行说明。
对于开发环境,您需要具有很多计算能力,因为训练在计算上非常昂贵。 Mac 用户相当受限于计算能力。 Windows 和 Ubuntu 用户可以使用更多处理器和**通用图形处理单元****GP-GPU**),来增强其开发环境。 下一节将对此进行说明。
# 通用图形处理单元 - GP-GPU
GP-GPU 是一种特殊的硬件,可加快训练深度学习模型的训练过程。 NVIDIA 公司提供的 GP-GPU 由于具有完善的软件和社区支持,因此在深度学习培训和部署中非常受欢迎。 读者可以设置带有此类 GP-GPU 的机器以进行更快的培训。 有很多选择,读者可以根据预算选择一个。 选择与 GP-GPU 功率相对应的 RAM,CPU 和硬盘也很重要。 安装硬件后,必须安装以下驱动程序和库。 使用 Mac 或不使用 GP-GPU 的 Windows/Ubuntu 的读者可以跳过安装。
GP-GPU 是一种特殊的硬件,可加快训练深度学习模型的训练过程。 NVIDIA 公司提供的 GP-GPU 由于具有完善的软件和社区支持,因此在深度学习训练和部署中非常受欢迎。 读者可以设置带有此类 GP-GPU 的机器以进行更快的训练。 有很多选择,读者可以根据预算选择一个。 选择与 GP-GPU 功率相对应的 RAM,CPU 和硬盘也很重要。 安装硬件后,必须安装以下驱动程序和库。 使用 Mac 或不使用 GP-GPU 的 Windows/Ubuntu 的读者可以跳过安装。
以下是设置环境所需的库:
......@@ -272,9 +272,9 @@ CUDA 是 NVIDIA 使用 GPU 的并行特性提供的 API 层。 安装此驱动
训练有素的深度学习模型需要几个库。 我们将安装以下库,并查看在竞争软件包中选择以下软件包的原因:
* Python 和其他依赖项
* OpenCV
* OpenCV
* TensorFlow
*
* Keras
# Python
......@@ -426,14 +426,14 @@ Hello, TensorFlow!
TensorBoard 是一套可视化工具,用于使用 TensorFlow 训练基于深度学习的模型。 可以在 TensorBoard 中可视化以下数据:
* **图**:计算图,设备位置和张量详细信息
* **标量**:指标,例如损,迭代精度
* **标量**:指标,例如损,迭代精度
* **图像**:用于查看带有相应标签的图像
* **音频**:用于收听训练或生成的音频
* **分布**:用于查看某些标量的分布
* **直方图**:包括权重和偏的直方图
* **直方图**:包括权重和偏的直方图
* **投影器**:帮助可视化 3 维空间中的数据
* **文本**:打印训练文本数据
* **配置文件**:查看用于培训的硬件资源
* **配置文件**:查看用于训练的硬件资源
Tensorboard 与 TensorFlow 一起安装。 转到 python3 提示符并输入以下命令(类似于上一个示例)以开始使用 Tensorboard:
......
此差异已折叠。
......@@ -5,17 +5,17 @@
* 如何从经过分类训练的模型中提取特征
* 如何使用 TensorFlow Serving 在生产系统中进行更快的推断
* 如何使用这些功能计算查询图像和目标集之间的相似度
* 使用分类模型进行排名
* 将分类模型用于排名
* 如何提高检索系统的速度
* 从整体上看系统的架构
* 当目标图像过多时,使用自编码器学习紧凑的描述
* 当目标图像过多时,使用自编码器学习紧凑的描述
* 训练去噪自编码器
# 了解视觉特征
深度学习模型经常因无法解释而受到批评。 基于神经网络的模型通常被认为像黑匣子,因为人类很难推理出深度学习模型的工作原理。 由于激活函数,深度学习模型对图像进行的层转换是非线性的,因此不容易可视化。 已经开发出了通过可视化深层网络的层来解决对不可解释性的批评的方法。 在本节中,我们将研究可视化深层的尝试,以便了解模型的工作原理。
可视化可以使用模型的激活和渐变来完成。 可以使用以下技术可视化激活:
可视化可以使用模型的激活和梯度来完成。 可以使用以下技术可视化激活:
* **最近邻**:可以对图像进行层激活,并且可以一起看到该激活的最近图像。
* **降维**:激活的尺寸可以通过**主成分分析****PCA**)或 **T 分布随机邻居嵌入****t-SNE**),可在二维或三维中可视化。 PCA 通过将值投影到最大方差方向来减小尺寸。 t-SNE 通过将最接近的点映射到三个维度来减小维度。 降维的使用及其技术超出了本书的范围。 建议您参考基本的机器学习材料,以了解有关降维的更多信息。
......@@ -95,7 +95,7 @@ TensorBoard 说明了代码的输出
image_width, image_height = 128, 128 vgg_model = tf.keras.applications.vgg16.VGG16(include_top=False)
```
图层由以图层名称作为键的字典组成,模型中的图层以权重作为键值,以方便访问。 现在,我们将从第五个块 `block5_conv1` 中获取第一卷积层,以计算可视化效果。 输入和输出在此处定义:
层由以层名称作为键的字典组成,模型中的层以权重作为键值,以方便访问。 现在,我们将从第五个块 `block5_conv1` 中获取第一卷积层,以计算可视化效果。 输入和输出在此处定义:
```py
input_image = vgg_model.input
......@@ -136,7 +136,7 @@ for filter_idx in range(20):
break
```
优化之后,通过均值减去并调整标准偏差来完成归一化。 然后,可以按比例缩小滤镜并将其裁剪到其渐变值,如下所示:
优化之后,通过均值减去并调整标准偏差来完成归一化。 然后,可以按比例缩小滤镜并将其裁剪到其梯度值,如下所示:
```py
if loss_value > 0:
......@@ -167,11 +167,11 @@ for filter_idx in range(20):
可以在网络中的某些层上放大神经元激活,而不是合成图像。 放大原始图像以查看特征效果的概念称为 **DeepDream**。 创建 DeepDream 的步骤是:
1. 拍摄图像并从 CNN 中选择一个层。
1. 拍摄图像并从 CNN 中选择一个层。
2. 在特定的层进行激活。
3. 修改渐变,以使渐变和激活相等。
3. 修改梯度,以使梯度和激活相等。
4. 计算图像和反向传播的梯度。
5. 必须使用正则化对图像进行抖动和归一化。
5. 必须将正则化用于图像的抖动和归一化。
6. 像素值应修剪。
7. 为了实现分形效果,对图像进行了多尺度处理。
......@@ -266,7 +266,7 @@ for i in range(no_octave - 1):
octave_images.append(image_difference)
```
现在可以使用所有八度图像运行优化。 窗口在图像上滑动,计算渐变激活以创建梦,如下所示:
现在可以使用所有八度图像运行优化。 窗口在图像上滑动,计算梯度激活以创建梦,如下所示:
```py
for octave_idx in range(no_octave):
......@@ -682,7 +682,7 @@ deconvolution_layer_5 = deconvolution_layer(deconvolution_layer_4, 3,
activation=tf.nn.tanh)
```
该网络经过培训,可以快速收敛。 传递图像特征时可以存储瓶颈层。 这有助于减少可用于检索的数据库的大小。 仅需要编码器部分即可为特征建立索引。 自编码器是一种有损压缩算法。 它与其他压缩算法不同,因为它从数据中学习压缩模式。 因此,自编码器模型特定于数据。 自编码器可以与 t-SNE 结合使用以获得更好的可视化效果。 自编码器学习的瓶颈层可能对其他任务没有用。 瓶颈层的大小可以大于以前的层。 在这种分叉和收敛连接的情况下,稀疏的自编码器就会出现。 在下一节中,我们将学习自编码器的另一种应用。
该网络经过训练,可以快速收敛。 传递图像特征时可以存储瓶颈层。 这有助于减少可用于检索的数据库的大小。 仅需要编码器部分即可为特征建立索引。 自编码器是一种有损压缩算法。 它与其他压缩算法不同,因为它从数据中学习压缩模式。 因此,自编码器模型特定于数据。 自编码器可以与 t-SNE 结合使用以获得更好的可视化效果。 自编码器学习的瓶颈层可能对其他任务没有用。 瓶颈层的大小可以大于以前的层。 在这种分叉和收敛连接的情况下,稀疏的自编码器就会出现。 在下一节中,我们将学习自编码器的另一种应用。
# 使用自编码器进行降噪
......@@ -766,7 +766,7 @@ for batch_no in range(total_batches):
train_summary_writer.add_summary(merged_summary, batch_no)
```
开始此培训后,可以在 TensorBoard 中查看结果。 损失显示在此处:
开始此训练后,可以在 TensorBoard 中查看结果。 损失显示在此处:
![](img/2ed9d697-3908-4169-927f-99769d2f7bdf.png)
Tensorboard 说明了输出图
......
......@@ -19,7 +19,7 @@
该图显示了带有边界框的四个对象。 我们将学习可以执行查找框任务的算法。 这些应用在自动驾驶汽车和工业对象等机器人视觉领域具有巨大的应用前景。 我们可以将定位和检测任务概括为以下几点:
* 本地化检测标签内图像中的一个对象
* 定位检测标签内图像中的一个对象
* 检测可找到图像中的所有对象以及标签
区别在于对象的数量。 在检测中,存在可变数量的对象。 在设计与定位或检测有关的深度学习模型的体系结构时,此小差异会带来很大的不同。 接下来,我们将看到可用于任务的各种数据集。
......@@ -30,7 +30,7 @@
# ImageNet 数据集
ImageNet 具有用于评估分类,本地化和检测任务的数据。 第 2 章,“图像分类”详细讨论了分类数据集。 与分类数据类似,本地化任务有 1,000 个类别。 准确度是根据前五次检测得出的。 所有图像中至少会有一个边界框。 有 470,000 张图像的检测问题有 200 个对象,每个图像平均有 1.1 个对象。
ImageNet 具有用于评估分类,定位和检测任务的数据。 第 2 章,“图像分类”详细讨论了分类数据集。 与分类数据类似,定位任务有 1,000 个类别。 准确度是根据前五次检测得出的。 所有图像中至少会有一个边界框。 有 470,000 张图像的检测问题有 200 个对象,每个图像平均有 1.1 个对象。
# PASCAL VOC 挑战
......@@ -96,9 +96,9 @@ def calculate_iou(gt_bb, pred_bb):
# 平均精度均值
mAP 用于评估检测算法。 mAP 度量是检测到的边界框的精度和召回率的乘积。 mAP 值的范围是 0 到 100。数字越大,则越好。 可以通过分别为每个类别计算**平均精度****AP**),然后计算该类别的平均值来计算 mAP。 仅当 mAP 高于 0.5 时,检测结果才被视为真正的阳性。 通过绘制每个类别的绘制精度/召回曲线,可以合并来自测试图像的所有检测。 曲线下的最终区域可用于算法比较。 mAP 是衡量网络灵敏度的一种很好的方法,同时不会引发很多错误警报。 我们已经了解了数据集的评估算法。 接下来,我们将研究本地化任务的算法。
mAP 用于评估检测算法。 mAP 度量是检测到的边界框的精度和召回率的乘积。 mAP 值的范围是 0 到 100。数字越大,则越好。 可以通过分别为每个类别计算**平均精度****AP**),然后计算该类别的平均值来计算 mAP。 仅当 mAP 高于 0.5 时,检测结果才被视为真正的阳性。 通过绘制每个类别的绘制精度/召回曲线,可以合并来自测试图像的所有检测。 曲线下的最终区域可用于算法比较。 mAP 是衡量网络灵敏度的一种很好的方法,同时不会引发很多错误警报。 我们已经了解了数据集的评估算法。 接下来,我们将研究定位任务的算法。
# 本地化算法
# 定位算法
定位算法是在第 2 章,“图像分类”和第 3 章,“图像检索”中学习的材料的扩展。 在图像分类中,图像经过 CNN(卷积神经网络)的多层。 CNN 的最后一层输出属于每个标签的概率值。 可以扩展它以定位对象。 我们将在以下各节中看到这些想法。
......@@ -117,7 +117,7 @@ mAP 用于评估检测算法。 mAP 度量是检测到的边界框的精度和
比例空间是使用各种大小的图像的概念。 图像会缩小为较小的尺寸,因此可以在相同尺寸的窗口中检测到较大的对象。 可以使用减小的尺寸将图像调整为某些尺寸。 通过删除替代像素或插值来调整图像大小可能会留下一些伪像。 因此,图像被平滑并迭代调整大小。 通过平滑和调整大小获得的图像是比例空间。
窗口在每个刻度上滑动以定位对象。 运行多个比例相当于使用更大的窗口运行图像。 在多个规模上运行的计算复杂度很高。 可以通过以准确性为代价进行快速移动来加快本地化速度。 复杂性使解决方案无法在生产中使用。 滑动窗口的思想可以通过完全卷积的滑动窗口实现而变得高效。
窗口在每个刻度上滑动以定位对象。 运行多个比例相当于使用更大的窗口运行图像。 在多个规模上运行的计算复杂度很高。 可以通过以准确性为代价进行快速移动来加快定位速度。 复杂性使解决方案无法在生产中使用。 滑动窗口的思想可以通过完全卷积的滑动窗口实现而变得高效。
# 将全连接层训练为卷积层
......@@ -145,9 +145,9 @@ logits = tf.reshape(logits, [-1, 10])
在示例的上部,常规分类表示为完全卷积层。 在该图的下部,相同的内核应用于更大的图像,最后生成`2x2`而不是 1。最后一层表示这些边界框的输出中的四个。 具有用于预测的体积可以提高效率,但是盒子仍然存在准确定位的问题。 因此不需要滑动窗口,因此解决了复杂性。 纵横比总是在变化,必须在多个比例尺上看到。 通过完全卷积方法生成的边界框不是很准确。 仅针对额外区域进行额外计算。 可以想像,这些盒子仅限于经过训练的盒子的数量。 接下来,我们将看到一种更准确地检测边界框位置的方法。
# 将本地化视为回归问题
# 将定位视为回归问题
思考本地化的一种基本方法是将问题建模为回归问题。 边界框是四个数字,因此可以通过回归设置以直接方式进行预测。 我们还需要预测标签,这是一个分类问题。
思考定位的一种基本方法是将问题建模为回归问题。 边界框是四个数字,因此可以通过回归设置以直接方式进行预测。 我们还需要预测标签,这是一个分类问题。
有不同的参数化可用于定义边界框。 边界框通常有四个数字。 表示形式之一是坐标的中心以及边界框的高度和宽度。 通过删除全连接层并用回归编码器替换它,可以使用预训练的模型。 必须使用 L2 损失对回归进行正则化,而 L2 损失在异常值方面表现不佳。 L1 的损失比 L1 好。 用平滑化的正则化交换回归更好。 对模型进行微调可提供良好的准确性,而对整个网络进行训练只会带来微不足道的性能改善。 在训练时间和准确性之间进行权衡。 接下来,我们将看到使用卷积网络进行回归的不同应用。
......@@ -169,9 +169,9 @@ logits = tf.reshape(logits, [-1, 10])
![](img/e4493c04-62ab-4564-9465-cb134209a626.png)
上图显示网络越深,结果越好。 对于 AlexNet,本地化方法未在本文中描述。 OverFeat 使用带有框合并的多尺度卷积回归。 VGG 使用了本地化,但比例尺和位置较少。 这些收益归因于深层特征。 ResNet 使用不同的本地化方法和更深入的功能。
上图显示网络越深,结果越好。 对于 AlexNet,定位方法未在本文中描述。 OverFeat 使用带有框合并的多尺度卷积回归。 VGG 使用了定位,但比例尺和位置较少。 这些收益归因于深层特征。 ResNet 使用不同的定位方法和更深入的功能。
回归编码器和分类编码器独立运行。 因此,有可能预测边界框的标签不正确。 通过在不同的层上附加回归编码器可以解决此问题。 该方法也可以用于多个对象,从而解决了对象检测问题。 给定一个图像,找到其中的所有实例。 很难将检测视为回归,因为输出的数量是可变的。 一个图像可能有两个对象,而另一个可能有三个或更多。 在下一节中,我们将看到更有效地处理检测问题的算法。
回归编码器和分类编码器独立运行。 因此,有可能预测边界框的标签不正确。 通过在不同的层上附加回归编码器可以解决此问题。 该方法也可以用于多个对象,从而解决了对象检测问题。 给定一个图像,找到其中的所有实例。 很难将检测视为回归,因为输出的数量是可变的。 一个图像可能有两个对象,而另一个可能有三个或更多。 在下一节中,我们将看到更有效地处理检测问题的算法。
# 检测对象
......@@ -193,7 +193,7 @@ logits = tf.reshape(logits, [-1, 10])
* 通过选择性搜索形成了多个建议,因此必须计算许多推论,通常约为 2,000
* 必须对三个分类器进行训练,这会增加参数的数量
* 没有端到端的培训
* 没有端到端的训练
# Fast R-CNN
......@@ -217,7 +217,7 @@ Ren 等人提出了 [Faster R-CNN](https://arxiv.org/pdf/1506.01497.pdf)。 Fast
# 单发多框探测器
SSD(单发多框)是所有方法中最快的。 此方法同时预测对象并找到边界框。 在培训期间,可能会有很多负面因素,因此很难否定地挖掘班级失衡。 CNN 的输出具有各种大小的功能。 这些被传递到`3x3`卷积过滤器以预测边界框。
SSD(单发多框)是所有方法中最快的。 此方法同时预测对象并找到边界框。 在训练期间,可能会有很多负面因素,因此很难否定地挖掘班级失衡。 CNN 的输出具有各种大小的功能。 这些被传递到`3x3`卷积过滤器以预测边界框。
此步骤将预测对象和边界框:
......@@ -229,7 +229,7 @@ SSD(单发多框)是所有方法中最快的。 此方法同时预测对象
# 对象检测 API
Google 发布了经过预先训练的模型,并在`COCO`数据集上对各种算法进行了训练,以供公众使用。 该 API 建立在 TensorFlow 之上,旨在用于构建,训练和部署对象检测模型。 这些 API 支持对象检测和本地化任务。 预训练模型的可用性可对新数据进行微调,从而加快训练速度。 这些不同的模型在速度和准确性之间进行权衡。
Google 发布了经过预先训练的模型,并在`COCO`数据集上对各种算法进行了训练,以供公众使用。 该 API 建立在 TensorFlow 之上,旨在用于构建,训练和部署对象检测模型。 这些 API 支持对象检测和定位任务。 预训练模型的可用性可对新数据进行微调,从而加快训练速度。 这些不同的模型在速度和准确性之间进行权衡。
# 安装与配置
......@@ -316,7 +316,7 @@ tar -xzvf ssd_mobilenet_v1_coco_11_06_2017.tar.gz
# 重新训练对象检测模型
使用相同的 API,我们可以为自定义数据集重新训练模型。 定制数据的训练涉及数据集的准备,选择算法以及执行微调。 整个流水线可以作为参数传递给训练脚本。 训练数据必须转换为 TensorFlow 记录。 TensorFlow 记录是 Google 提供的一种文件格式,可以使数据读取比常规文件更快。 现在,我们将逐步进行培训
使用相同的 API,我们可以为自定义数据集重新训练模型。 定制数据的训练涉及数据集的准备,选择算法以及执行微调。 整个流水线可以作为参数传递给训练脚本。 训练数据必须转换为 TensorFlow 记录。 TensorFlow 记录是 Google 提供的一种文件格式,可以使数据读取比常规文件更快。 现在,我们将逐步进行训练
# Pet 数据集的数据准备
......@@ -347,9 +347,9 @@ python object_detection/create_pet_tf_record.py \
# 目标检测的训练流水线
培训 protobuf 必须配置为进行培训。 在此过程中,以下五件事很重要:
训练 protobuf 必须配置为进行训练。 在此过程中,以下五件事很重要:
* 具有型号类型的型号配置
* 具有模型类型的模型配置
* `train_config`用于标准训练参数
* 必须报告的指标的`eval_config`
* 数据集的`train_input_`配置
......@@ -379,7 +379,7 @@ eval_input_reader: {
# 训练模型
现在,API,数据和配置文件已准备好进行重新培训。 可以通过以下命令触发训练:
现在,API,数据和配置文件已准备好进行重新训练。 可以通过以下命令触发训练:
```py
PYTHONPATH=.:./slim/. python object_detection/train.py \
......@@ -388,7 +388,7 @@ PYTHONPATH=.:./slim/. python object_detection/train.py \
--train_dir=~/Chapter04
```
培训将从大约 140 的损失开始,并将持续减少。 培训将永远进行,必须使用`Ctrl + C`命令手动将其终止。 训练期间创建的检查点可在以后用于推理。
训练将从大约 140 的损失开始,并将持续减少。 训练将永远进行,必须使用`Ctrl + C`命令手动将其终止。 训练期间创建的检查点可在以后用于推理。
# 使用 TensorBoard 监控损失和准确性
......@@ -398,7 +398,7 @@ PYTHONPATH=.:./slim/. python object_detection/train.py \
tensorboard --logdir=/home/ubuntu/Chapter04
```
培训和评估都可以在 TensorBoard 中可视化。
训练和评估都可以在 TensorBoard 中可视化。
# 训练自动驾驶汽车的行人检测
......@@ -445,7 +445,7 @@ def dense_layer(input_layer, units, activation=tf.nn.leaky_relu):
return layer
```
可以注意到,激活层为`leaky_relu`,权重以截断的正态分布初始化。 这些修改的层可用于构建模型。 该模型如下创建:
可以注意到,激活层为`leaky_relu`,权重以截断的正态分布初始化。 这些修改的层可用于构建模型。 该模型如下创建:
```py
yolo = tf.pad(images, np.array([[0, 0], [3, 3], [3, 3], [0, 0]]), name='pad_1')
......
......@@ -50,9 +50,9 @@
分割场景对于机器人看清周围世界并与之互动至关重要。 工业和家用机器人必须处理这些对象。 一旦根据对象跨越了机器人的视野,就可以进行处理。 还有更多值得一提的应用程序:
* 对缺陷进行分割的工具的工业检查
* 对缺陷进行分割的工业检查工具
* 时装行业的色彩诊断; 可以将图像与各种时尚对象进行分割并将其用于颜色解析
* 区分背景与前景应用人像效果
* 区分背景与前景应用人像效果
在下一部分中,我们将学习一些用于评估分割算法的公共数据集。
......@@ -94,7 +94,7 @@
现在,让我们学习几个新概念,这些概念称为上采样,无规则卷积和转置卷积,它们将帮助我们更好地理解该网络。
# 通过池化对层进行上采样
# 通过池化对层进行上采样
在第 1 章“入门”中,我们讨论了最大池化。 最大池化是一种从窗口中选取最大值的采样策略。 对于上采样,可以相反。 每个值都可以用零包围,以对该层进行上采样,如下所示:
......@@ -106,9 +106,9 @@
从索引角度来看,上采样比附加零产生更好的结果。 这种通过池对层进行上采样的方法是无法学到的,并且可以按原样工作。 接下来,我们将看到如何使用可学习的参数进行上采样和下采样。
# 通过卷积对层进行采样
# 通过卷积对层进行采样
可以使用卷积直接对层进行升采样或降采样。 可以增加用于卷积的步幅以引起下采样,如下所示:
可以使用卷积直接对层进行升采样或降采样。 可以增加用于卷积的步幅以引起下采样,如下所示:
![](img/d2cd8c90-7707-4786-a5bc-e40b08a8a35d.png)
......@@ -253,7 +253,7 @@ RefiNet 使用编码器,然后使用解码器。 CNN 的编码器输出。 解
# DeepLab v3
[Chen 等人在论文中使用批处理归一化](https://arxiv.org/pdf/1706.05587.pdf)以提高性能。 功能的多尺度以级联方式编码,以提高性能:
[Chen 等人在论文中使用批归一化](https://arxiv.org/pdf/1706.05587.pdf)以提高性能。 功能的多尺度以级联方式编码,以提高性能:
![](img/301dc866-0bfd-4010-a5f1-df4e33e12e34.png)
......@@ -433,12 +433,12 @@ for image, image_id in zip(y_test_pred, y_test_mask):
在本节中,我们将使用**国际摄影测量与遥感学会****ISPRS**)提供的数据集。 数据集包含 5 毫米分辨率的德国波茨坦的卫星图像。 这些图像带有红外和图像高度轮廓的附加数据。 与图像相关联的六个标签是:
*
*
* 植被
* 树木
* 驾驶室
*乱无章
* 不透水的
* 巢穴
*
* 硬质
总共提供了 8,000 x 6,000 色块的 38 张图像。 请转到[页面](http://www2.isprs.org/commissions/comm3/wg4/data-request-form2.html)并填写表格。 之后,在表单上选择以下选项:
......@@ -522,7 +522,7 @@ fcn_model = tf.keras.models.Model(input=input_tensor, output=x)
经 He 等人许可复制。
该架构看起来与 R-CNN 类似,但增加了分段功能。 这是一个具有端到端培训的多阶段网络。 学习了区域提案。 该网络分为两个部分,一个用于检测,另一个用于分类评分。 结果非常好,如下所示:
该架构看起来与 R-CNN 类似,但增加了分段功能。 这是一个具有端到端训练的多阶段网络。 学习了区域提案。 该网络分为两个部分,一个用于检测,另一个用于分类评分。 结果非常好,如下所示:
![](img/a0697d7c-9d03-46fd-9ae2-ff00ff587825.png)
......
......@@ -11,9 +11,9 @@
**相似性学习**是训练度量以计算两个实体之间的相似性的过程。 由于学习了相似性,这也可以称为度量学习。 度量可以是欧几里得或余弦或其他自定义距离函数。 实体可以是任何数据,例如图像,视频,文本或表格。 为了计算度量,需要图像的向量表示。 此表示可以是 CNN 计算的特征,如第 3 章,“图像检索”中所述。 为对象分类而学习的 CNN 可以用作计算度量的向量。 为图像分类而获得的特征向量将不是手头任务的最佳表示。 在相似性学习中,我们发现有关 CNN 的信息,这些 CNN 会为相似性学习任务生成经过训练的特征。 这里给出了相似性学习的一些应用:
* 用于生物识别的人脸验证以比较两个人脸
* 视觉搜索现实世界中的对象以在线查找类似产品
* 视觉推荐某些属性相似的产品
* 使用生物识别比较两个人脸的人脸验证
* 用于在线查找类似产品的现实世界中的对象的视觉搜索
* 某些属性相似的产品的视觉推荐
在本章中,我们将详细了解人脸验证。 因此,让我们从可用于相似性学习的算法开始。
......@@ -64,7 +64,7 @@ left_bottleneck = get_model(left_input)
right_bottleneck = get_model(right_input)
```
瓶颈层是从模型中获取的,并被串联在一起。 这对于相似性学习问题至关重要。 可以创建任意数量的模型,并且可以连接最后的层,如下所示:
瓶颈层是从模型中获取的,并被串联在一起。 这对于相似性学习问题至关重要。 可以创建任意数量的模型,并且可以连接最后的层,如下所示:
```py
dense_layer_bottleneck = tf.concat([left_bottleneck, right_bottleneck], 1)
......@@ -233,7 +233,7 @@ Wang 等人提出的 [DeepRank](https://users.eecs.northwestern.edu/~jwa368/pdfs
* **属性识别**:查找诸如性别,微笑等属性
* **情感分析**:分析人的情感
* **人脸验证**:查找两个图像是否属于同一个人
* **人脸识别**为人脸识别
* **人脸识别**识别人脸
* **人脸聚类**:将同一个人的人脸分组在一起
在以下各节中,让我们详细了解这些任务的数据集和实现。
......@@ -252,9 +252,9 @@ Wang 等人提出的 [DeepRank](https://users.eecs.northwestern.edu/~jwa368/pdfs
人脸标志是人脸的空间点。 空间点对应于各种人脸特征的位置,例如眼睛,眉毛,鼻子,嘴巴和下巴。 点数可能会从 5 到 78 不等,具体取决于注释。 人脸界标也称为**基准点****人脸关键点****人脸姿势**。 人脸标志具有许多应用,如下所示:
* 人脸对齐以更好地进行人脸验证或识别
* 更好地进行人脸验证或识别的人脸对齐
* 跟踪视频中的人脸
* 人脸表情或情感可以测量
* 测量人脸表情或情感
* 有助于诊断疾病
接下来,我们将看到一些带有基准点注释的数据库。
......
......@@ -6,7 +6,7 @@
* 了解用于评估它们的不同数据集和指标
* 了解用于自然语言处理问题的一些技巧
* 向量模型的不同词
* 向量模型的不同
* 几种用于图像字幕生成的算法
* 不良结果和改进范围
......
......@@ -3,9 +3,9 @@
生成模型已经成为计算机视觉中的重要应用。 与前几章讨论的应用程序根据图像进行预测不同,生成模型可以为特定目标创建图像。 在本章中,我们将了解:
* 生成模型的应用
* 样式转移算法
* 风格迁移算法
* 训练超分辨率图像模型
* 生成模型的实施和培训
* 生成模型的实现和训练
* 当前模型的缺点
在本章的最后,您将能够实现一些出色的应用程序来传递样式,并理解与生成模型相关的可能性和困难。
......@@ -138,11 +138,11 @@
# 神经艺术风格迁移
我们将要实现的第一个应用程序是**神经艺术风格转换**。 在这里,我们将**梵高**艺术的样式转移到图像上。 图像可以视为样式和内容的组合。 艺术风格转换技术将图像转换为看起来像具有特定绘画风格的绘画。 我们将看到如何编写这个想法。 `loss`功能将比较生成的图像与照片内容和绘画风格。 因此,针对图像像素而不是针对网络权重执行优化。 通过将照片的内容与生成的图像相比较,然后是绘画风格和生成的图像,可以计算出两个值。
我们将要实现的第一个应用程序是**神经艺术风格转换**。 在这里,我们将**梵高**艺术的风格迁移到图像上。 图像可以视为样式和内容的组合。 艺术风格转换技术将图像转换为看起来像具有特定绘画风格的绘画。 我们将看到如何编写这个想法。 `loss`功能将比较生成的图像与照片内容和绘画风格。 因此,针对图像像素而不是针对网络权重执行优化。 通过将照片的内容与生成的图像相比较,然后是绘画风格和生成的图像,可以计算出两个值。
# 内容损失
由于像素不是一个好的选择,我们将使用各个层的 CNN 功能,因为它们可以更好地表示内容。 如第 3 章,“图像检索”, 所示,初始层具有高频,例如边缘,拐角和纹理。 后面的层代表对象,因此更适合内容。 后者可以比像素更好地将对象与对象进行比较。 但是为此,我们需要先使用以下代码导入所需的库:
由于像素不是一个好的选择,我们将使用各个层的 CNN 功能,因为它们可以更好地表示内容。 如第 3 章,“图像检索”, 所示,初始层具有高频,例如边缘,拐角和纹理。 后面的层代表对象,因此更适合内容。 后者可以比像素更好地将对象与对象进行比较。 但是为此,我们需要先使用以下代码导入所需的库:
```py
import numpy as np
......@@ -195,7 +195,7 @@ vgg_model = VGG16_Avg(include_top=False)
content_layer = vgg_model.get_layer('block5_conv1').output
```
现在,使用截断的 VGG 创建新模型,直到具有良好功能的层。 因此,该图像现在可以加载,并且可以用于执行前向推断,以获得**实际激活的层**。 使用以下代码创建 TensorFlow 变量以捕获激活:
现在,使用截断的 VGG 创建新模型,直到具有良好功能的层。 因此,该图像现在可以加载,并且可以用于执行前向推断,以获得**实际激活的层**。 使用以下代码创建 TensorFlow 变量以捕获激活:
```py
content_model = Model(vgg_model.input, content_layer)
......@@ -243,7 +243,7 @@ cost_function = K.function([vgg_model.input], [mse_loss]+grads)
optimiser = ConvexOptimiser(cost_function, content_image_shape)
```
可以使用简单的优化程序来优化此功能,因为它是凸的,因此是确定性的。 我们还可以在迭代的每个步骤中保存图像。 我们将以可访问渐变的方式进行定义,就像我们使用 scikit-learn 的优化程序进行最终优化一样。 注意,该损失函数是凸的,因此,简单的优化器足以满足计算要求。 可以使用以下代码定义优化器:
可以使用简单的优化程序来优化此功能,因为它是凸的,因此是确定性的。 我们还可以在迭代的每个步骤中保存图像。 我们将以可访问梯度的方式进行定义,就像我们使用 scikit-learn 的优化程序进行最终优化一样。 注意,该损失函数是凸的,因此,简单的优化器足以满足计算要求。 可以使用以下代码定义优化器:
```py
def optimise(optimiser, iterations, point, tensor_shape, file_name):
......@@ -256,7 +256,7 @@ def optimise(optimiser, iterations, point, tensor_shape, file_name):
return point
```
优化器采用`loss`函数,点和渐变,然后返回更新。 需要使用以下代码生成随机图像,以使内容损失最小化:
优化器采用`loss`函数,点和梯度,然后返回更新。 需要使用以下代码生成随机图像,以使内容损失最小化:
```py
def generate_rand_img(shape):
......@@ -292,7 +292,7 @@ Current loss value: 3.66387653351
![](img/6f9d1c9b-34ce-4c4b-ab82-4a67f76fb906.png)
优化器拍摄图像并更新像素,以使内容相同。 虽然效果较差,但可以在一定程度上重现图像内容。 通过迭代获得的所有图像都很好地说明了图像的生成方式。 此过程不涉及批处理。 在下一节中,我们将看到如何以绘画风格创建图像。
优化器拍摄图像并更新像素,以使内容相同。 虽然效果较差,但可以在一定程度上重现图像内容。 通过迭代获得的所有图像都很好地说明了图像的生成方式。 此过程不涉及批。 在下一节中,我们将看到如何以绘画风格创建图像。
# 使用 Gram 矩阵的样式损失
......@@ -406,7 +406,7 @@ w,h = style.size
src = img_arr[:,:h,:w]
```
和以前一样,我们将获取一系列图层输出以计算样式损失。 但是,我们仍然只需要一层输出来计算内容损失。 我们如何知道要抓哪一层? 如前所述,层越低,内容重构将越精确。 在将内容重建与样式相结合时,我们可以预期,对内容进行更宽松的重建将为样式带来更大的影响空间(例如:灵感)。 此外,即使没有相同的细节,后面的图层也可以确保图像看起来像相同的主题。 以下代码用于此过程:
和以前一样,我们将获取一系列层输出以计算样式损失。 但是,我们仍然只需要一层输出来计算内容损失。 我们如何知道要抓哪一层? 如前所述,层越低,内容重构将越精确。 在将内容重建与样式相结合时,我们可以预期,对内容进行更宽松的重建将为样式带来更大的影响空间(例如:灵感)。 此外,即使没有相同的细节,后面的层也可以确保图像看起来像相同的主题。 以下代码用于此过程:
```py
style_layers = [outputs['block{}_conv2'.format(o)] for o in range(1,6)]
......@@ -479,8 +479,8 @@ Current loss value: 203.045211792
现在,我们将结束样式转换部分。 此操作确实很慢,但可以处理任何图像。 在下一节中,我们将看到如何使用类似的想法来创建超分辨率网络。 有几种方法可以改善这种情况,例如:
* 将高斯滤镜添加到随机图像
*层添加不同的权重
* 可以使用不同的层和权重来满足
* 为层添加不同的权重
* 可以使用不同的层和权重来满足
* 初始化图像而不是随机图像
* 颜色可以保存
* 掩码可以用于指定所需的内容
......@@ -491,7 +491,7 @@ Current loss value: 203.045211792
# 生成对抗网络
**生成对抗网络****GAN**)由 **Ian Goodfellow** 于 2014 年发明。这是一种无监督算法,其中两个神经网络被训练为判别器和生成器。 , 同时。 该技术可以根据随机噪声生成图像,判别器可以评估是否为原始图像。 经过进一步培训后,生成器网络可以生成逼真的图像。 生成器网络通常是反卷积神经网络,而判别器是卷积神经网络。
**生成对抗网络****GAN**)由 **Ian Goodfellow** 于 2014 年发明。这是一种无监督算法,其中两个神经网络被训练为判别器和生成器。 , 同时。 该技术可以根据随机噪声生成图像,判别器可以评估是否为原始图像。 经过进一步训练后,生成器网络可以生成逼真的图像。 生成器网络通常是反卷积神经网络,而判别器是卷积神经网络。
理解这一点的一个很好的类比是,将生成器看作是伪造钱币的人,而将判别器看作是确定钱币是否为假币的警察。 生成器会根据警察的反馈不断提高伪钞的质量,直到警察无法区分伪钞和伪钞。 现在,让我们从实现开始。
......@@ -626,7 +626,7 @@ gan = tf.contrib.gan.gan_model(
(input_noise, labels))
```
其余的培训与原始 GAN 相似。 接下来,我们将使用 GAN 压缩图像。
其余的训练与原始 GAN 相似。 接下来,我们将使用 GAN 压缩图像。
# 对抗损失
......@@ -684,7 +684,7 @@ gan_loss = tf.contrib.gan.losses.combine_adversarial_loss(
# InfoGAN
InfoGAN 无需任何明确的监督培训即可生成所需标签的图像。 `infogan_model`接受非结构化和结构化的输入,如以下代码所示:
InfoGAN 无需任何明确的监督训练即可生成所需标签的图像。 `infogan_model`接受非结构化和结构化的输入,如以下代码所示:
```py
info_gan = tf.contrib.gan.infogan_model(
......@@ -743,6 +743,6 @@ GAN 生成的图像具有一些缺点,例如计数,透视图和全局结构
# 总结
在本章中,我们了解了生成模型和大量应用程序。 我们实它们是为了在保留内容的同时将样式从一种转换为另一种。 我们看到了 GAN 背后的直觉和经过训练的模型可以做到这一点。 最后,我们了解了视觉对话系统。
在本章中,我们了解了生成模型和大量应用程序。 我们实它们是为了在保留内容的同时将样式从一种转换为另一种。 我们看到了 GAN 背后的直觉和经过训练的模型可以做到这一点。 最后,我们了解了视觉对话系统。
在下一章中,我们将学习用于视频分析的深度学习方法。 我们将看到如何通过摄像机,文件等访问视频内容。 我们将通过在帧级别和整个视频上应用分类来实现视频分类。 稍后,我们将看到如何跟踪视频中的对象。
\ No newline at end of file
......@@ -5,11 +5,11 @@
在本章中,我们将涵盖的以下主题:
* 视频分类的数据集和算法
* 将视频分成帧并分类视频
* 在单个框架级别上训练视觉特征模型 0
* 将视频分成帧并分类
* 在单个框架级别上训练视觉特征模型
* 了解 3D 卷积及其在视频中的使用
* 在视频上合并运动向量
* 利用时间信息进行目标跟踪
* 将时间信息用于目标跟踪
* 人体姿势估计和视频字幕等应用
# 了解视频和分类
......@@ -308,7 +308,7 @@ net.compile(loss=tf.keras.losses.categorical_crossentropy,
复制自 Pfister 等人
视频中的帧被获取并通过卷积网络。 融合层,并获得姿势热图。 姿势热图与光流结合以获得扭曲的热图。 合并时间范围内的扭曲热图,以生成合并的热图,得到最终姿势。
视频中的帧被获取并通过卷积网络。 融合层,并获得姿势热图。 姿势热图与光流结合以获得扭曲的热图。 合并时间范围内的扭曲热图,以生成合并的热图,得到最终姿势。
# 跟踪人脸标志
......
......@@ -7,16 +7,16 @@
* 了解影响深度学习模型训练和推理性能的因素
* 通过各种方法提高性能
* 查看各种硬件的基准并学习调整它们以实现最佳性能的步骤
* 使用各种云平台进行部署
* 使用各种移动平台进行部署
* 将各种云平台用于部署
* 将各种移动平台用于部署
# 模型表现
性能对于深度学习模型的培训和部署都很重要。 由于大数据或大模型架构,培训通常需要更多时间。 结果模型可能更大,因此在 RAM 受限的移动设备中使用时会出现问题。 更多的计算时间导致更多的基础架构成本。 推理时间在视频应用中至关重要。 由于前面提到了性能的重要性,因此在本节中,我们将研究提高性能的技术。 降低模型复杂度是一个简单的选择,但会导致精度降低。 在这里,我们将重点介绍一些方法,这些方法可以提高性能,而准确性却没有明显的下降。 在下一节中,我们将讨论量化选项。
性能对于深度学习模型的训练和部署都很重要。 由于大数据或大模型架构,训练通常需要更多时间。 结果模型可能更大,因此在 RAM 受限的移动设备中使用时会出现问题。 更多的计算时间导致更多的基础架构成本。 推理时间在视频应用中至关重要。 由于前面提到了性能的重要性,因此在本节中,我们将研究提高性能的技术。 降低模型复杂度是一个简单的选择,但会导致精度降低。 在这里,我们将重点介绍一些方法,这些方法可以提高性能,而准确性却没有明显的下降。 在下一节中,我们将讨论量化选项。
# 量化模型
深度学习模型的权重具有 32 位浮点值。 当权重量化为 8 位时,精度下降很小,因此在部署中不会注意到。 结果权重的精度似乎对深度学习模型的精度性能影响较小。 这个想法对深度学习很有趣,并且在模型大小变得至关重要时很有用。 通过用 8 位值替换 32 位浮点值,可以显着减小模型大小并提高推理速度。 实模型量化时有很多选择。 权重可以存储在 8 位中,但推理操作可以以 32 位浮点值执行。 架构的每个组件在量化大小上的行为可能有所不同,因此,取决于层,可以选择 32 或 16 或 8 位值。
深度学习模型的权重具有 32 位浮点值。 当权重量化为 8 位时,精度下降很小,因此在部署中不会注意到。 结果权重的精度似乎对深度学习模型的精度性能影响较小。 这个想法对深度学习很有趣,并且在模型大小变得至关重要时很有用。 通过用 8 位值替换 32 位浮点值,可以显着减小模型大小并提高推理速度。 实模型量化时有很多选择。 权重可以存储在 8 位中,但推理操作可以以 32 位浮点值执行。 架构的每个组件在量化大小上的行为可能有所不同,因此,取决于层,可以选择 32 或 16 或 8 位值。
量化工作有多种原因。 通常,深度学习模型经过训练可以解决图像中的噪声,因此可以被认为是健壮的。 推理计算可以具有冗余信息,并且可以由于量化而去除冗余信息。
......@@ -64,7 +64,7 @@ MobileNets 已显示,可以在移动和嵌入式设备上使用的精度有所
# AWS
Amazon Web Services(AWS)将支持扩展到基于 TensorFlow 的模型的开发和部署。 在 [Amazon](https://aws.amazon.com/) 上注册 AWS,然后选择 **Amazon 机器映像****AMI**)之一。 AMI 是安装了所有必需软件的计算机的映像。 您不必担心安装软件包。 **AWS 提供了深度学习 AMI****DLAMI**),以简化培训和部署深度学习模型。 有几种选择。 在这里,我们将使用 Conda,因为它带有运行 TensorFlow 所需的几个软件包。 Python 有两个选项:版本 2 和版本 3。以下代码将在 CUDA 8 的 Python 3 上使用 Keras 2 激活 TensorFlow:
Amazon Web Services(AWS)将支持扩展到基于 TensorFlow 的模型的开发和部署。 在 [Amazon](https://aws.amazon.com/) 上注册 AWS,然后选择 **Amazon 机器映像****AMI**)之一。 AMI 是安装了所有必需软件的计算机的映像。 您不必担心安装软件包。 **AWS 提供了深度学习 AMI****DLAMI**),以简化训练和部署深度学习模型。 有几种选择。 在这里,我们将使用 Conda,因为它带有运行 TensorFlow 所需的几个软件包。 Python 有两个选项:版本 2 和版本 3。以下代码将在 CUDA 8 的 Python 3 上使用 Keras 2 激活 TensorFlow:
```py
source activate tensorflow_p36
......@@ -81,7 +81,7 @@ source activate tensorflow_p27
还可以通过执行以下给定的步骤来启动**虚拟机****VM**):
1. 转到 [Amazon AWS](https://aws.amazon.com/),然后使用您的 Amazon 帐户登录。
2. 从登录页面选择启动虚拟机
2. 从登录页面选择虚拟机来启动
![](img/d8d35771-0127-4f5f-9f7a-37edc6eb0c1c.png)
......@@ -132,7 +132,7 @@ source activate tensorflow_p27
Google Cloud Platform(GCP)是 Google 提供的云平台,具有与 AWS 类似的功能。 通过执行以下步骤,可以使用一个简单的虚拟机来训练诸如 AWS 之类的模型:
1. 使用 [cloud.google.com](https://cloud.google.com/) 转到 Google Cloud Platform,然后使用您的 Gmail 帐户登录到该平台。
2. 现在,通过单击转到控制台按钮进入控制台:
2. 现在,通过单击“转到控制台”按钮进入控制台:
![](img/b38e13e2-2b2a-45e4-841c-fc5feed34fcd.png)
......@@ -154,11 +154,11 @@ Google Cloud Platform(GCP)是 Google 提供的云平台,具有与 AWS 类
使用该外壳,您可以安装 TensorFlow 并可以训练或部署模型。 有许多选项可从虚拟机的配置中选择。 根据成本和时间的权衡,可以选择配置。
GCP 具有**云机器学习引擎**,可在使用 TensorFlow 时为我们提供帮助。 GCP 的三个组件可以一起用于构建培训和部署基础架构:
GCP 具有**云机器学习引擎**,可在使用 TensorFlow 时为我们提供帮助。 GCP 的三个组件可以一起用于构建训练和部署基础架构:
1. 用于预处理图像的 Cloud DataFlow
2. 用于培训和部署模型的云机器学习引擎
3. 用于存储培训数据,代码和结果的 Google Cloud Storage
2. 用于训练和部署模型的云机器学习引擎
3. 用于存储训练数据,代码和结果的 Google Cloud Storage
可以在[这个页面](https://cloud.google.com/ml-engine/docs/flowers-tutorial)上找到使用云机器学习引擎建立自定义图像分类模型的出色教程。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册