提交 dd0d8ba1 编写于 作者: W wizardforcel

2020-08-04 13:48:31

上级 be3856a7
......@@ -8,7 +8,7 @@
* 应用 Stylenet 和神经式项目
* 实现 DeepDream
> 提醒一下,读者可以在[这里](https://github.com/nfmcclure/tensorflow_cookbook),以及[ Packt 仓库](https://github.com/PacktPublishing/TensorFlow-Machine-Learning-Cookbook-Second-Edition)找到本章的所有代码。
> 提醒一下,读者可以在[这里](https://github.com/nfmcclure/tensorflow_cookbook),以及 [Packt 仓库](https://github.com/PacktPublishing/TensorFlow-Machine-Learning-Cookbook-Second-Edition)找到本章的所有代码。
# 介绍
......@@ -20,11 +20,11 @@
图 1:如何在图像上应用卷积滤镜(长度与宽度之间的深度),以创建新的特征层。这里,我们有一个`2x2`卷积滤波器,在`5x5`输入的有效空间中操作,两个方向的步幅为 1。结果是`4x4`矩阵
CNN 还具有满足更多要求的其他操作,例如引入非线性(ReLU)或聚合参数(max P \ pool)以及其他类似操作。上图是在`5x5`数组上应用卷积运算的示例,其中卷积滤波器是`2x2`矩阵。步长为 1,我们只考虑有效的展示位置。此操作中的可训练变量将是`2x2`滤波器权重。在卷积之后,通常会跟进聚合操作,例如 max pool。如果我们在两个方向上采用步幅为 2 的`2x2`区域的最大值,下图提供了最大池如何操作的示例:
CNN 还具有满足更多要求的其他操作,例如引入非线性(ReLU)或聚合参数(最大池化)以及其他类似操作。上图是在`5x5`数组上应用卷积运算的示例,其中卷积滤波器是`2x2`矩阵。步长为 1,我们只考虑有效的展示位置。此操作中的可训练变量将是`2x2`滤波器权重。在卷积之后,通常会跟进聚合操作,例如最大池化。如果我们在两个方向上采用步幅为 2 的`2x2`区域的最大值,下图提供了最大池如何操作的示例:
![](img/1cc7f69a-e794-4bb1-b857-7a857482777f.png)
图 2:Max Pool 操作如何运行的示例。这里,我们有一个`2x2`窗口,在`4x4`输入的有效空间上操作,两个方向的步幅为 2。结果是`2x2`矩阵
图 2:最大池化操作如何运行的示例。这里,我们有一个`2x2`窗口,在`4x4`输入的有效空间上操作,两个方向的步幅为 2。结果是`2x2`矩阵
虽然我们将首先创建自己的 CNN 进行图像识别,但强烈建议您使用现有的体系结构,我们将在本章的其余部分中进行操作。
......@@ -32,7 +32,7 @@ CNN 还具有满足更多要求的其他操作,例如引入非线性(ReLU)
# 实现简单的 CNN
在本文中,我们将开发一个四层卷积神经网络,以提高我们预测 MNIST 数字的准确率。前两个卷积层将各自由卷积-ReLU-Max 池操作组成,最后两个层将是完全连接的层。
在本文中,我们将开发一个四层卷积神经网络,以提高我们预测 MNIST 数字的准确率。前两个卷积层将各自由卷积-ReLU-最大池化操作组成,最后两个层将是完全连接的层。
## 准备
......@@ -149,7 +149,7 @@ model_output = my_conv_net(x_input)
test_model_output = my_conv_net(eval_input)
```
1. 我们将使用的损失函数是 softmax 函数。我们使用稀疏 softmax,因为我们的预测只是一个类别,而不是多个类别。我们还将使用一个对 logits 而不是缩放概率进行操作的损失函数:
1. 我们将使用的损失函数是 softmax 函数。我们使用稀疏 softmax,因为我们的预测只是一个类别,而不是多个类别。我们还将使用一个对对率而不是缩放概率进行操作的损失函数:
```py
loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=model_output, labels=y_target))
......@@ -177,7 +177,7 @@ init = tf.global_variables_initializer()
sess.run(init)
```
1. 我们现在可以开始训练我们的模型。我们以随机选择的批次循环数据。我们经常选择在训练上评估模型并测试批次并记录准确率和损失。我们可以看到,经过 500 代,我们可以在测试数据上快速达到 96% -97% 的准确率:
1. 我们现在可以开始训练我们的模型。我们以随机选择的批次循环数据。我们经常选择在训练上评估模型并测试批次并记录准确率和损失。我们可以看到,经过 500 代,我们可以在测试数据上快速达到 96%-97% 的准确率:
```py
train_loss = []
......@@ -274,7 +274,7 @@ for i in range(6):
## 工作原理
我们提高了 MNIST 数据集的表现,并构建了一个模型,在从头开始训练时,可快速达到约 97% 的准确率。我们的前两层是卷积,ReLU 和 Max Pooling 的组合。第二层是完全连接的层。我们以 100 个批次进行了训练,并研究了我们训练的几代的准确率和损失。最后,我们还绘制了六个随机数字和每个数字的预测/实际值。
我们提高了 MNIST 数据集的表现,并构建了一个模型,在从头开始训练时,可快速达到约 97% 的准确率。我们的前两层是卷积,ReLU 和最大池化的组合。第二层是完全连接的层。我们以 100 个批次进行了训练,并研究了我们训练的几代的准确率和损失。最后,我们还绘制了六个随机数字和每个数字的预测/实际值。
CNN 非常适合图像识别。造成这种情况的部分原因是卷积层创建了自己的低级特征,当它们遇到重要的部分图像时会被激活。这种类型的模型自己创建特征并将其用于预测。
......@@ -506,7 +506,7 @@ def train_step(loss_value, generation_num):
return train_step
```
1. 我们还必须具有精确度函数,以计算一批图像的准确率。我们将输入 logits 和目标向量,并输出平均精度。然后我们可以将它用于训练和测试批次:
1. 我们还必须具有精确度函数,以计算一批图像的准确率。我们将输入对率目标向量,并输出平均精度。然后我们可以将它用于训练和测试批次:
```py
def accuracy_of_batch(logits, targets):
......@@ -763,7 +763,7 @@ git clone https://github.com/tensorflow/models/tree/master/research/inception
1. 为了使用先前训练的模型,我们必须下载网络权重并将其应用于我们的模型。为此,[您必须访问该站点](https://github.com/tensorflow/models/tree/master/research/slim),并按照说明下载并安装 cifar10 模型架构和权重。您还将最终下载包含下面描述的构建,训练和测试脚本的数据目录。
> 对于此步骤,我们导航到 research / inception / inception 目录,然后执行以下命令,`--train_directory`,`--validation_directory`,`--output_directory`和`--labels_file`的路径指向相对路径或完整路径创建的目录结构。
> 对于此步骤,我们导航到`research/inception/inception`目录,然后执行以下命令,`--train_directory`,`--validation_directory`,`--output_directory`和`--labels_file`的路径指向相对路径或完整路径创建的目录结构。
1. 现在我们将图像放在正确的文件夹结构中,我们必须将它们变成`TFRecords`对象。我们通过运行以下命令来完成此操作:
......@@ -799,7 +799,7 @@ git clone https://github.com/tensorflow/models/tree/master/research/inception
## 另见
* [官方 Tensorflow Inception-v3 教程](https://www.tensorflow.org/tutoriaimg/image_recognition)
* [Tensorflow Inception-v3 官方教程](https://www.tensorflow.org/tutoriaimg/image_recognition)
* [Googlenet Inception-v3 文件](https://arxiv.org/abs/1512.00567)
# 应用 StyleNet 和 NeuralStyle 项目
......@@ -838,7 +838,7 @@ from tensorflow.python.framework import ops
ops.reset_default_graph()
```
1. 然后我们可以声明两个图像的位置:原始图像和样式图像。出于我们的目的,我们将使用本书的封面图片作为原始图像;对于风格形象,我们将使用 Vincent van Gough 的星夜。随意使用您想要的任何两张图片。如果您选择使用这些图片,[可以在本书的 GitHub 网站上找到(导航到 Styelnet 部分)](https://github.com/nfmcclure/tensorflow_cookbook)
1. 然后我们可以声明两个图像的位置:原始图像和样式图像。出于我们的目的,我们将使用本书的封面图片作为原始图像;对于风格形象,我们将使用文森特·梵高的星夜。随意使用您想要的任何两张图片。如果您选择使用这些图片,[可以在本书的 GitHub 网站上找到(导航到 Styelnet 部分)](https://github.com/nfmcclure/tensorflow_cookbook)
```py
original_image_file = 'temp/book_cover.jpg'
......@@ -1065,7 +1065,7 @@ with tf.Session() as sess:
![](img/f26567a0-ae26-409e-87ee-2ef19c33567d.png)
图 6:使用 Stylenet 算法将书籍封面图像与 Starry Night 相结合。请注意,可以通过更改脚本开头的权重来使用不同的样式重点
图 6:使用 Stylenet 算法将书籍封面图像与星夜相结合。请注意,可以通过更改脚本开头的权重来使用不同的样式重点
## 工作原理
......@@ -1296,7 +1296,7 @@ if __name__=="__main__":
![](img/07fcab05-6c73-4aeb-b2ed-a1330c65fa0d.png)
图 7:本书的封面,贯穿 DeepDream 算法,其特征层编号为 50,110,100 和 139
图 7:本书的封面,贯穿 DeepDream 算法,其特征层编号为 50,110,100 和 139
## 更多
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册