提交 74232705 编写于 作者: W wizardforcel

2020-09-10 22:53:30

上级 c0d40257
......@@ -25,7 +25,7 @@
Keras 具有许多优点,其中包括:
* 它专为新用户和专家而设计,提供一致且简单的 API
* 通过简单,一致的界面对用户友好,该界面针对常见用例进行了优化
* 通过简单,一致的接口对用户友好,该接口针对常见用例进行了优化
* 它为用户错误提供了很好的反馈,这些错误很容易理解,并且经常伴随有用的建议
* 它是模块化且可组合的; Keras 中的模型是通过结合可配置的构建块来构建的
* 通过编写自定义构建块很容易扩展
......@@ -54,7 +54,7 @@ Keras 可能是不寻常的,因为它具有作为独立开源项目维护的
急切的执行意味着代码的执行是命令式编程环境,而不是基于图的环境,这是在 TensorFlow(v1.5 之前)的初始产品中工作的唯一方法。 这种命令式(即刻)风格允许直观的调试,快速的开发迭代,支持 TensorFlow `SavedModel`格式,并内置支持对 CPU,GPU 甚至 Google 自己的硬件**张量处理单元****TPU**)进行分布式训练。
TensorFlow 实还支持`tf.data`,分发策略,导出模型(可通过 TensorFlow Lite 部署在移动和嵌入式设备上)以及用于表示和分类结构化数据的特征列。
TensorFlow 实还支持`tf.data`,分发策略,导出模型(可通过 TensorFlow Lite 部署在移动和嵌入式设备上)以及用于表示和分类结构化数据的特征列。
# 默认的 Keras 配置文件
......@@ -152,7 +152,7 @@ Keras **数据类型**(`dtypes`)与 TensorFlow Python 数据类型相同,
# Keras 模型
Keras 基于神经网络模型的概念。 主要模型称为**序列**,是层的线性栈。 还有一个使用 Keras 函数式 API 的系统。
Keras 基于神经网络模型的概念。 主要模型称为**序列**,是层的线性栈。 还有一个使用 Keras 函数式 API 的系统。
# Keras 顺序模型
......@@ -168,7 +168,7 @@ Keras 基于神经网络模型的概念。 主要模型称为**序列**,是层
# 创建顺序模型的第一种方法
首先,可以将图层实例列表传递给构造函数,如以下示例所示。
首先,可以将图层实例列表传递给构造,如以下示例所示。
在下一章中,我们将对层进行更多的讨论。 目前,我们将仅作足够的解释,以使您了解此处发生的情况。
......@@ -197,7 +197,7 @@ train_y, test_y = tf.cast(train_y,tf.int64),tf.cast(test_y,tf.int64)
注意在模型定义中我们如何传递图层列表:
* `Flatten`接受`28 x 28`(即 2D)像素图像的输入,并产生 784(即 1D)量,因为下一个(密集)层是一维的。
* `Flatten`接受`28 x 28`(即 2D)像素图像的输入,并产生 784(即 1D)量,因为下一个(密集)层是一维的。
* `Dense`是一个完全连接的层,意味着其所有神经元都连接到上一层和下一层中的每个神经元。 下面的示例有 512 个神经元,其输入通过 ReLU(非线性)激活函数传递。
* `Dropout`随机关闭上一层神经元的一部分(在这种情况下为 0.2)。 这样做是为了防止任何特定的神经元变得过于专业化,并导致模型*与数据*过拟合,从而影响测试数据上模型的准确性指标(在后面的章节中将对此进行更多介绍)。
* 最后的`Dense`层具有一个称为`softmax`的特殊激活函数,该函数将概率分配给可能的 10 个输出单元中的每一个:
......@@ -236,7 +236,7 @@ model1.compile (optimizer= optimiser, loss='sparse_categorical_crossentropy', me
model1.fit(train_x, train_y, batch_size=batch_size, epochs=epochs)
```
呼叫`fit()`的输出如下,显示了时期训练时间,丢失和准确性:
调用`fit()`的输出如下,显示了时期训练时间,丢失和准确性:
```py
Epoch 1/10 60000/60000 [==============================] - 5s 77us/step - loss: 0.2031 - acc: 0.9394 ...
......@@ -259,7 +259,7 @@ model1.evaluate(test_x, test_y)
# 创建顺序模型的第二种方法
对于同一体系结构,将层列表传递给`Sequential`模型的构造函数的替代方法是使用`add`方法,如下所示:
对于同一体系结构,将层列表传递给`Sequential`模型的构造的替代方法是使用`add`方法,如下所示:
```py
model2 = tf.keras.models.Sequential();
......@@ -289,7 +289,7 @@ model2.evaluate(test_x, test_y)
# Keras 函数式 API
与以前看到的`Sequential`模型的简单线性栈相比,函数式 API 使您可以构建更复杂的体系结构。 它还支持更高级的模型。 这些模型包括多输入和多输出模型,具有共享层的模型以及具有剩余连接的模型。
与以前看到的`Sequential`模型的简单线性栈相比,函数式 API 使您可以构建更复杂的体系结构。 它还支持更高级的模型。 这些模型包括多输入和多输出模型,具有共享层的模型以及具有剩余连接的模型。
这是函数式 API 的使用的简短示例,其架构与前两个相同。
......@@ -342,7 +342,7 @@ model3.evaluate(test_x, test_y)
Keras `Model`类可以被子类化,如下面的代码所示。 Google 指出,*纯*函数风格(如前面的示例所示)比子类风格更可取(我们在此包括其内容是出于完整性的考虑,因为它很有趣)。
首先,请注意如何在构造函数`.__init__()`)中分别声明和命名图层。
首先,请注意如何在构造`.__init__()`)中分别声明和命名图层。
然后,注意在`call()`方法中各层如何以函数风格链接在一起。 此方法封装了*前向传播*
......
......@@ -321,7 +321,7 @@ print(y_train_ohe[i]) #
# 层
ANN 使用的基本数据结构是**层**,许多相互连接的层构成了一个完整的 ANN。 可以将一层设想为神经元的阵列,尽管使用单词*神经元*可能会产生误导,因为在人脑神经元和构成一层的人工神经元之间只有很少的对应关系。 记住这一点,我们将在下面使用术语*神经元*。 与任何计算机处理单元一样,神经元的特征在于其输入和输出。 通常,神经元具有许多输入和一个输出值。 每个输入连接均带有权重`w[i]`
ANN 使用的基本数据结构是**层**,许多相互连接的层构成了一个完整的 ANN。 可以将一层设想为神经元的数组,尽管使用单词*神经元*可能会产生误导,因为在人脑神经元和构成一层的人工神经元之间只有很少的对应关系。 记住这一点,我们将在下面使用术语*神经元*。 与任何计算机处理单元一样,神经元的特征在于其输入和输出。 通常,神经元具有许多输入和一个输出值。 每个输入连接均带有权重`w[i]`
下图显示了一个神经元。 重要的是要注意,激活函数`f`对于平凡的 ANN 而言是非线性的。 网络中的一般神经元接收来自其他神经元的输入,并且每个神经元的权重为`w[i]`,如图所示,网络*通过调整这些权重来学习权重*,以便输入生成所需的输出:
......
......@@ -355,9 +355,9 @@ for i in range(10):
这具有直接的优势,即我们可以在我们的子类化模型中使用`tf.keras.Model`的所有功能,包括编译和训练例程以及层功能,在后续的章节中,我们将详细介绍。
对于我们的逻辑回归示例,我们需要在子类中编写两个方法。 首先,我们需要编写一个构造函数,该构造函数调用超类的构造函数,以便正确创建模型。 在这里,我们传入正在使用的类数(`10`),并在实例化模型以创建单个层时使用此构造函数。 我们还必须声明`call`方法,并使用该方法来编程在模型训练的正向传递过程中发生的情况。
对于我们的逻辑回归示例,我们需要在子类中编写两个方法。 首先,我们需要编写一个构造器,该构造器调用超类的构造器,以便正确创建模型。 在这里,我们传入正在使用的类数(`10`),并在实例化模型以创建单个层时使用此构造器。 我们还必须声明`call`方法,并使用该方法来编程在模型训练的正向传递过程中发生的情况。
稍后,当我们考虑具有前向和后向传递的神经网络时,我们将对这种情况进行更多说明。 对于我们当前的目的,我们只需要知道在`call`方法中,我们采用输入的`softmax`来产生输出。 `softmax`函数的作用是获取一个矢量(或张量),然后在其元素具有该矢量最大值的位置上用几乎为 1 的值覆盖,在所有其他位置上使用几乎为零的值覆盖。 这与单热编码很相似。 请注意,在此方法中,由于`softmax`未为 GPU 实现,因此我们必须在 CPU 上强制执行:
稍后,当我们考虑具有前向和后向传递的神经网络时,我们将对这种情况进行更多说明。 对于我们当前的目的,我们只需要知道在`call`方法中,我们采用输入的`softmax`来产生输出。 `softmax`函数的作用是获取一个向量(或张量),然后在其元素具有该向量最大值的位置上用几乎为 1 的值覆盖,在所有其他位置上使用几乎为零的值覆盖。 这与单热编码很相似。 请注意,在此方法中,由于`softmax`未为 GPU 实现,因此我们必须在 CPU 上强制执行:
```py
# model definition (the canonical Google way)
......@@ -466,7 +466,7 @@ KNN 背后的想法相对简单。 给定新的特定数据点的值,请查看
有 150 个数据点(每个数据点都包含前面提到的四个测量值)和 150 个相关标签。 我们将它们分为 120 个训练数据点和 30 个测试数据点。
首先,我们有通常的进口,如下所示:
首先,我们有通常的导入,如下所示:
```py
import numpy as np
......@@ -531,7 +531,7 @@ k = 5
首先是我们的`distance`函数。 执行此函数后,可变距离包含我们 120 个训练点与 30 个测试点之间的所有(曼哈顿)距离; 也就是说,由 30 行乘 120 列组成的数组-曼哈顿距离,有时也称为**城市街区距离**,是`x[1], x[2]`的两个数据点向量的值之差的绝对值; 即`|x[1] - x[2]|`。 如果需要的话(如本例所示),将使用各个特征差异的总和。
`tf.expand``test_x`上增加了一个额外的维数,以便在减法发生之前,可以通过广播使两个阵列*扩展*以使其与减法兼容。 由于`x`具有四个特征,并且`reduce_sum`超过`axis=2`,因此结果是我们 30 个测试点和 120 个训练点之间的距离的 30 行。 所以我们的`prediction`函数是:
`tf.expand``test_x`上增加了一个额外的维数,以便在减法发生之前,可以通过广播使两个数组*扩展*以使其与减法兼容。 由于`x`具有四个特征,并且`reduce_sum`超过`axis=2`,因此结果是我们 30 个测试点和 120 个训练点之间的距离的 30 行。 所以我们的`prediction`函数是:
```py
def prediction(train_x, test_x, train_y,k):
......
......@@ -228,7 +228,7 @@ plt.show()
# 构建模型
我们最初的进口包括我们的卷积网络的进口
我们最初的导入包括我们的卷积网络的导入
注意,我们不必显式地使用 Keras,因为它是 TensorFlow 本身的模块,如以下代码所示:
......
......@@ -460,7 +460,7 @@ x_train = x_train.astype('float32')/255
x_test = x_test.astype('float32')/255
```
如果将标签作为一站式量提供,则最好了解它们,因此,我们现在将这样做:
如果将标签作为一站式量提供,则最好了解它们,因此,我们现在将这样做:
```py
y_train = tf.keras.utils.to_categorical(y_train, number_of_classes) # or use tf.one_hot()
......
......@@ -222,7 +222,7 @@ def get_model():
# 计算损失
现在,我们需要两个图像的内容和风格之间的损失。 我们将使用均方损失如下。 请注意,`image1 - image2`中的减法是两个图像阵列之间逐元素的。 此减法有效,因为图像已在`load_image`中调整为相同大小:
现在,我们需要两个图像的内容和风格之间的损失。 我们将使用均方损失如下。 请注意,`image1 - image2`中的减法是两个图像数组之间逐元素的。 此减法有效,因为图像已在`load_image`中调整为相同大小:
```py
def rms_loss(image1,image2):
......
......@@ -378,7 +378,7 @@ else:
# 建立并实例化我们的模型
如我们先前所见,一种用于构建模型的技术是将所需的层传递到`tf.keras.Sequential()`构造函数中。 在这种情况下,我们分为三层:嵌入层,RNN 层和密集层。
如我们先前所见,一种用于构建模型的技术是将所需的层传递到`tf.keras.Sequential()`构造中。 在这种情况下,我们分为三层:嵌入层,RNN 层和密集层。
第一嵌入层是向量的查找表,一个向量用于每个字符的数值。 它的尺寸为`embedding_dimension`。 中间,循环层是 GRU; 其大小为`recurrent_nn_units`。 最后一层是长度为`vocabulary_length`单位的密集输出层。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册