提交 7170d2f3 编写于 作者: W wizardforcel

2020-08-05 10:42:48

上级 6981f379
......@@ -151,7 +151,7 @@ final loss=1.6131552457809448
在撰写本文时,[TFSlim 的文档页面在此链接中被发现为空](https://www.tensorflow.org/api_docs/python/tf/contrib/slim)。 但是,[可以在此链接的源代码中找到一些文档](https://github.com/tensorflow/tensorflow/tree/r1.4/tensorflow/contrib/slim)
我们将使用 TFSlim 来学习如何在后面的章节中使用预训练的模型,如 VGG16 和 Inception V3。
我们将使用 TFSlim 来学习如何在后面的章节中使用预训练的模型,如 VGG16 和 InceptionV3。
# TFLearn
......
......@@ -54,7 +54,7 @@ Keras 的简单工作流程如下:
我们来看看每个步骤。
您可以使用代码包中包含的 Jupyter Notebook `ch-03_Keras_101`来遵循本章中的代码示例。 尝试修改笔记本中的代码以探索各种选项。
您可以使用代码包中包含的 Jupyter 笔记本`ch-03_Keras_101`来遵循本章中的代码示例。 尝试修改笔记本中的代码以探索各种选项。
# 创建 Keras 模型
......@@ -100,11 +100,11 @@ model = Model(inputs=[i1,i2,i3], outputs=[o1,o2,o3])
# Keras 层
Keras 为网络架构的简单构建提供了几个内置层类。以下部分概述和描述了 Keras 2 在撰写本书时提供的各种类型的层。
Keras 为网络架构的简单构建提供了几个内置层类。以下部分概述和描述了 Keras2 在撰写本书时提供的各种类型的层。
# Keras 核心层
Keras 核心层实现基本操作,几乎用于各种网络架构。下表给出了 Keras 2 提供的层的摘要和说明:
Keras 核心层实现基本操作,几乎用于各种网络架构。下表给出了 Keras2 提供的层的摘要和说明:
| **层名称** | **描述** |
| --- | --- |
......@@ -286,7 +286,7 @@ model = Model(inputs=input, outputs=output)
compile(self, optimizer, loss, metrics=None, sample_weight_mode=None)
```
compile 方法有三个参数:
`compile`方法有三个参数:
* `optimizer`:您可以指定自己的函数或 Keras 提供的函数之一。此函数用于更新优化迭代中的参数。 Keras 提供以下内置优化器函数:
* `SGD`
......@@ -326,7 +326,7 @@ fit(self, x, y, batch_size=32, epochs=10, verbose=1, callbacks=None,
class_weight=None, sample_weight=None, initial_epoch=0)
```
我们不会详细介绍这种方法的参数; 您可以在[ Keras 网站](https://keras.io/models/sequential/)上阅读详细信息。
我们不会详细介绍这种方法的参数; 您可以在 [Keras 网站](https://keras.io/models/sequential/)上阅读详细信息。
对于我们之前创建的示例模型,使用以下代码训练模型:
......@@ -356,7 +356,7 @@ Keras 提供了几个补充基本工作流程的附加模块(附加函数在
* `datasets`模块提供了多种函数,可以快速访问几个流行的数据集,如 CIFAR10 图像,CIFAR100 图像,IMDB 电影评论,路透社新闻专线主题,MNIST 手写数字和波士顿房价。
* `initializers`模块提供了几种设置层初始随机权重参数的函数,如`Zeros``Ones``Constant``RandomNormal``RandomUniform``TruncatedNormal``VarianceScaling``Orthogonal``Identity``lecun_normal``lecun_uniform``glorot_normal``glorot_uniform``he_normal``he_uniform`
* `models`模块提供了几种恢复模型架构和权重的函数,如`model_from_json``model_from_yaml`,和`load_model`。可以使用`model.to_yaml()``model.to_json()`方法保存模型架构。通过调用`model.save()`方法可以保存模型权重。权重保存在 HDF5 文件中。
* `applications`模块提供了几种预先构建和预训练的模型,例如 Xception,VGG16,VGG19,ResNet50,Inception V3,InceptionResNet V2 和 MobileNet。我们将学习如何使用预建模型来预测我们的数据集。我们还将学习,如何使用来自略有不同的域的数据集,再训练`applications`模块中的预训练模型。
* `applications`模块提供了几种预先构建和预训练的模型,例如 Xception,VGG16,VGG19,ResNet50,InceptionV3,InceptionResNetV2 和 MobileNet。我们将学习如何使用预建模型来预测我们的数据集。我们还将学习,如何使用来自略有不同的域的数据集,再训练`applications`模块中的预训练模型。
这就结束了我们对 Keras 的简要介绍,这是 TensorFlow 的高级框架。我们将在本书中提供使用 Keras 构建模型的示例。
......
......@@ -16,8 +16,8 @@
* 在 TensorFlow 中使用**再训练的** VGG16 进行图像分类
* 使用 Keras 中预训练的 VGG16 进行图像分类
* 使用**再训练的** VGG16 在 Keras 中进行图像分类
* 使用 TensorFlow 中的 Inception v3 进行图像分类
* 在 TensorFlow 中使用**再训练的** Inception v3 进行图像分类
* 使用 TensorFlow 中的 InceptionV3 进行图像分类
* 在 TensorFlow 中使用**再训练的** InceptionV3 进行图像分类
# ImageNet 数据集
......@@ -96,18 +96,18 @@ inet.load_data(n_classes=1000)
| AlexNet | | | 15.3% | <https://www.cs.toronto.edu/~fritz/absps/imagenet.pdf> |
| Inception 也称为 Inception V1 | 69.8 | 89.6 | 6.67% | <https://arxiv.org/abs/1409.4842> |
| BN-Inception-V2 也称为 Inception V2 | 73.9 | 91.8 | 4.9% | <https://arxiv.org/abs/1502.03167> |
| Inception v3 | 78.0 | 93.9 | 3.46% | <https://arxiv.org/abs/1512.00567> |
| InceptionV3 | 78.0 | 93.9 | 3.46% | <https://arxiv.org/abs/1512.00567> |
| Inception V4 | 80.2 | 95.2 | | <http://arxiv.org/abs/1602.07261> |
| Inception-Resnet-V2 | 80.4 | 95.2 | | <http://arxiv.org/abs/1602.07261> |
| VGG16 | 71.5 | 89.8 | 7.4% | <https://arxiv.org/abs/1409.1556> |
| VGG19 | 71.1 | 89.8 | 7.3% | <https://arxiv.org/abs/1409.1556> |
| ResNet V1 50 | 75.2 | 92.2 | 7.24% | <https://arxiv.org/abs/1512.03385> |
| Resnet V1 101 | 76.4 | 92.9 | | <https://arxiv.org/abs/1512.03385> |
| Resnet V1 152 | 76.8 | 93.2 | | <https://arxiv.org/abs/1512.03385> |
| ResNet V2 50 | 75.6 | 92.8 | | <https://arxiv.org/abs/1603.05027> |
| ResNet V2 101 | 77.0 | 93.7 | | <https://arxiv.org/abs/1603.05027> |
| ResNet V2 152 | 77.8 | 94.1 | | <https://arxiv.org/abs/1603.05027> |
| ResNet V2 200 | 79.9 | 95.2 | | <https://arxiv.org/abs/1603.05027> |
| ResNetV1 50 | 75.2 | 92.2 | 7.24% | <https://arxiv.org/abs/1512.03385> |
| ResNetV1 101 | 76.4 | 92.9 | | <https://arxiv.org/abs/1512.03385> |
| ResNetV1 152 | 76.8 | 93.2 | | <https://arxiv.org/abs/1512.03385> |
| ResNetV2 50 | 75.6 | 92.8 | | <https://arxiv.org/abs/1603.05027> |
| ResNetV2 101 | 77.0 | 93.7 | | <https://arxiv.org/abs/1603.05027> |
| ResNetV2 152 | 77.8 | 94.1 | | <https://arxiv.org/abs/1603.05027> |
| ResNetV2 200 | 79.9 | 95.2 | | <https://arxiv.org/abs/1603.05027> |
| Xception | 79.0 | 94.5 | | <https://arxiv.org/abs/1610.02357> |
| MobileNet V1 | 41.3 至 70.7 | 66.2 至 89.5 | | <https://arxiv.org/pdf/1704.04861.pdf> |
......@@ -1190,18 +1190,18 @@ Probability 0.43% of [bear]
除了最后的嘈杂图像外,所有类别都已正确识别。通过适当的超参数调整,也可以进行改进。
到目前为止,您已经看到了使用预训练模型进行分类并对预训练模型进行微调的示例。接下来,我们将使用 Inception v3 模型显示分类示例。
到目前为止,您已经看到了使用预训练模型进行分类并对预训练模型进行微调的示例。接下来,我们将使用 InceptionV3 模型显示分类示例。
# TensorFlow 中的 Inception v3
# TensorFlow 中的 InceptionV3
您可以按照 Jupyter 笔记本中的代码`ch-12c_InceptionV3_TensorFlow`
TensorFlow 的 Inception v3 在 1,001 个标签上训练,而不是 1,000 个。此外,用于训练的图像被不同地预处理。我们在前面的部分中展示了预处理代码。让我们直接深入了解使用 TensorFlow 恢复 Inception v3 模型。
TensorFlow 的 InceptionV3 在 1,001 个标签上训练,而不是 1,000 个。此外,用于训练的图像被不同地预处理。我们在前面的部分中展示了预处理代码。让我们直接深入了解使用 TensorFlow 恢复 InceptionV3 模型。
让我们下载 Inception v3 的检查点文件:
让我们下载 InceptionV3 的检查点文件:
```py
# load the inception V3 model
# load the InceptionV3 model
model_name='inception_v3'
model_url='http://download.tensorflow.org/models/'
model_files=['inception_v3_2016_08_28.tar.gz']
......@@ -1223,9 +1223,9 @@ image_height=inception.inception_v3.default_image_size
image_width=inception.inception_v3.default_image_size
```
# 使用 TensorFlow 中的 Inception v3 进行图像分类
# 使用 TensorFlow 中的 InceptionV3 进行图像分类
图像分类与使用 VGG 16 模型的上一节中说明的相同。 Inception v3 模型的完整代码如下:
图像分类与使用 VGG 16 模型的上一节中说明的相同。 InceptionV3 模型的完整代码如下:
```py
x_p = tf.placeholder(shape=(None,
......@@ -1351,9 +1351,9 @@ Probability 1.55% of [pay-phone, pay-station]
虽然它在与 VGG 模型几乎相同的地方失败了,但并不算太糟糕。现在让我们用 COCO 动物图像和标签再训练这个模型。
# 使用 TensorFlow 中的再训练的 Inception v3 进行图像分类
# 使用 TensorFlow 中的再训练的 InceptionV3 进行图像分类
Inception v3 的再训练与 VGG16 不同,因为我们使用 softmax 激活层作为输出,`tf.losses.softmax_cross_entropy()`作为损耗函数。
InceptionV3 的再训练与 VGG16 不同,因为我们使用 softmax 激活层作为输出,`tf.losses.softmax_cross_entropy()`作为损耗函数。
1. 首先定义占位符:
......@@ -1584,7 +1584,7 @@ Probability 9.02% of [giraffe]
# 总结
迁移学习是一项伟大的发现,它允许我们通过将在较大数据集中训练的模型应用于不同的数据集来节省时间。当数据集很小时,迁移学习也有助于热启动训练过程。在本章中,我们学习了如何使用预训练的模型,如 VGG16 和 Inception v3,将不同数据集中的图像分类为他们所训练的数据集。我们还学习了如何使用 TensorFlow 和 Keras 中的示例再训练预训练模型,以及如何预处理图像以供给两个模型。
迁移学习是一项伟大的发现,它允许我们通过将在较大数据集中训练的模型应用于不同的数据集来节省时间。当数据集很小时,迁移学习也有助于热启动训练过程。在本章中,我们学习了如何使用预训练的模型,如 VGG16 和 InceptionV3,将不同数据集中的图像分类为他们所训练的数据集。我们还学习了如何使用 TensorFlow 和 Keras 中的示例再训练预训练模型,以及如何预处理图像以供给两个模型。
我们还了解到有几种模型在 ImageNet 数据集上进行了训练。尝试查找在不同数据集上训练的其他模型,例如视频数据集,语音数据集或文本/ NLP 数据集。尝试使用这些模型再训练并在您自己的数据集中使用您自己的深度学习问题。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册