提交 a9742644 编写于 作者: W wizardforcel

2020-09-09 18:21:53

上级 64d045a0
......@@ -16,7 +16,7 @@ TensorFlow 是 Python 中最受欢迎的机器学习框架之一。 通过这本
第 3 章,“TensorFlow 2 和 ANN 技术”,探讨了许多支持创建和使用神经网络的技术。 本章将介绍到 ANN 的数据表示,ANN 的层,创建模型,梯度下降算法的梯度计算,损失函数以及保存和恢复模型。
第 4 章,“TensorFlow 2 和监督机器学习”,描述了在涉及线性回归的两种情况下使用 TensorFlow 的示例,在这些情况下,特征映射到具有连续值的已知标签,从而可以进行预测 看不见的特征。
第 4 章,“TensorFlow 2 和监督机器学习”,描述了在涉及线性回归的两种情况下使用 TensorFlow 的示例,在这些情况下,特征映射到具有连续值的已知标签,从而可以进行预测看不见的特征。
第 5 章,“TensorFlow 2 和无监督学习”着眼于自动编码器在无监督学习中的两种应用:首先用于压缩数据;其次用于压缩数据。 第二,用于降噪,换句话说,去除图像中的噪声。
......
......@@ -4,7 +4,7 @@ TensorFlow 于 2011 年以 Google 的内部封闭源代码项目 DisBelief 诞
在撰写本书时,最新版本是 TensorFlow 2.0.0 alpha 版本,该版本在 2019 年 3 月 6 日的 TensorFlow 开发峰会上宣布。
TensorFlow 的名字来源于张量。 张量是向量和矩阵到更高维度的一般化。 张量的等级是唯一指定该张量的每个元素所用的索引数。 标量(简单数字)是等级 0 的张量,向量是等级 1 的张量,矩阵是等级 2 的张量,三维数组是等级 3 的张量。张量具有数据类型 和形状(张量中的所有数据项必须具有相同的类型)。 4 维张量的示例(即等级 4)是图像,其中维是例如`batch``height``width``color`通道内的示例:
TensorFlow 的名字来源于张量。 张量是向量和矩阵到更高维度的一般化。 张量的等级是唯一指定该张量的每个元素所用的索引数。 标量(简单数字)是等级 0 的张量,向量是等级 1 的张量,矩阵是等级 2 的张量,三维数组是等级 3 的张量。张量具有数据类型和形状(张量中的所有数据项必须具有相同的类型)。 4 维张量的示例(即等级 4)是图像,其中维是例如`batch``height``width``color`通道内的示例:
```py
image1 = tf.zeros([7, 28, 28, 3]) # example-within-batch by height by width by color
......
......@@ -13,7 +13,7 @@
# 监督学习
监督学习是一种机器学习场景,其中一组数据点中的一个或多个数据点与标签关联。 然后,模型*学习*,以预测看不见的数据点的标签。 为了我们的目的,每个数据点通常都是张量,并与一个标签关联。 在计算机视觉中,有很多受监督的学习问题; 例如,算法显示了许多成熟和未成熟的西红柿的图片,以及表明它们是否成熟的分类标签,并且在训练结束后,该模型能够预测未成熟的西红柿的状态 它的训练集。 这可能在番茄的物理分拣机制中有非常直接的应用。 或一种算法,该算法可以在显示许多示例以及它们的性别和年龄之后,学会预测新面孔的性别和年龄。 此外,如果模型已经在许多树图像及其类型标签上进行了训练,则可以学习根据树图像来预测树的类型可能是有益的。
监督学习是一种机器学习场景,其中一组数据点中的一个或多个数据点与标签关联。 然后,模型*学习*,以预测看不见的数据点的标签。 为了我们的目的,每个数据点通常都是张量,并与一个标签关联。 在计算机视觉中,有很多受监督的学习问题; 例如,算法显示了许多成熟和未成熟的西红柿的图片,以及表明它们是否成熟的分类标签,并且在训练结束后,该模型能够根据训练集预测未成熟的西红柿的状态。 这可能在番茄的物理分拣机制中有非常直接的应用。 或一种算法,该算法可以在显示许多示例以及它们的性别和年龄之后,学会预测新面孔的性别和年龄。 此外,如果模型已经在许多树图像及其类型标签上进行了训练,则可以学习根据树图像来预测树的类型可能是有益的。
# 线性回归
......@@ -314,7 +314,7 @@ split = 50000
(y_train, y_valid) = y_train[:split], y_train[split:]
```
如果标签是一键编码的,那么许多机器学习算法效果最好,因此我们接下来要做。 但请注意,我们会将产生的一束热张量转换回(一束热)NumPy 数组,以备稍后由 Keras 使用:
如果标签是单热编码的,那么许多机器学习算法效果最好,因此我们接下来要做。 但请注意,我们会将产生的一束热张量转换回(一束热)NumPy 数组,以备稍后由 Keras 使用:
```py
# one hot encode the labels using TensorFLow.
......@@ -326,7 +326,7 @@ split = 50000
#or use tf.keras.utils.to_categorical(y_train,10)
```
这是一段代码,其中显示了一个介于零到九之间的值以及其一键编码版本:
这是一段代码,其中显示了一个介于零到九之间的值以及其单热编码版本:
```py
# show difference between original label and one-hot-encoded label
......@@ -357,7 +357,7 @@ for i in range(10):
对于我们的逻辑回归示例,我们需要在子类中编写两个方法。 首先,我们需要编写一个构造函数,该构造函数调用超类的构造函数,以便正确创建模型。 在这里,我们传入正在使用的类数(`10`),并在实例化模型以创建单个层时使用此构造函数。 我们还必须声明`call`方法,并使用该方法来编程在模型训练的正向传递过程中发生的情况。
稍后,当我们考虑具有前向和后向传递的神经网络时,我们将对这种情况进行更多说明。 对于我们当前的目的,我们只需要知道在 call 方法中,我们采用输入的`softmax`来产生输出。 `softmax`函数的作用是获取一个矢量(或张量),然后在其元素具有该矢量最大值的位置上用几乎为 1 的值覆盖,在所有其他位置上使用以下值覆盖 几乎为零的值。 这与一键编码很相似。 请注意,在此方法中,由于`softmax`未为 GPU 实现,因此我们必须在 CPU 上强制执行:
稍后,当我们考虑具有前向和后向传递的神经网络时,我们将对这种情况进行更多说明。 对于我们当前的目的,我们只需要知道在 call 方法中,我们采用输入的`softmax`来产生输出。 `softmax`函数的作用是获取一个矢量(或张量),然后在其元素具有该矢量最大值的位置上用几乎为 1 的值覆盖,在所有其他位置上使用几乎为零的值覆盖。 这与单热编码很相似。 请注意,在此方法中,由于`softmax`未为 GPU 实现,因此我们必须在 CPU 上强制执行:
```py
# model definition (the canonical Google way)
......@@ -487,7 +487,7 @@ x.shape, y.shape
flower_labels = ["iris setosa", "iris virginica", "iris versicolor"]
```
现在是时候对标签进行一次热编码了。 `np.eye`返回一个二维数组,在对角线上有一个,默认为主对角线。 然后用`y`进行索引为我们提供了所需的`y`一键编码:
现在是时候对标签进行一次热编码了。 `np.eye`返回一个二维数组,在对角线上有一个,默认为主对角线。 然后用`y`进行索引为我们提供了所需的`y`单热编码:
```py
#one hot encoding, another method
......@@ -605,4 +605,4 @@ print("Accuracy = ",accuracy,"%")
在本章中,我们看到了在涉及线性回归的两种情况下使用 TensorFlow 的示例。 其中将特征映射到具有连续值的已知标签,从而可以对看不见的特征进行预测。 我们还看到了逻辑回归的一个示例,更好地描述为分类,其中将要素映射到分类标签,再次允许对看不见的要素进行预测。 最后,我们研究了用于分类的 KNN 算法。
我们现在将在第 5 章“将 TensorFlow 2 用于无监督学习”,继续进行无监督学习,在该过程中,要素和标签之间没有初始映射,并且 TensorFlow 的任务是 发现功能之​​间的关系。
\ No newline at end of file
我们现在将在第 5 章“将 TensorFlow 2 用于无监督学习”,继续进行无监督学习,在该过程中,要素和标签之间没有初始映射,并且 TensorFlow 的任务是发现功能之​​间的关系。
\ No newline at end of file
......@@ -123,7 +123,7 @@ for file in filenames:
x_train, x_test, y_train, y_test = train_test_split(x_all, y_all, test_size=0.2, random_state=42)
```
由于我们将使用卷积神经网络(`convNet`)对快速抽奖进行分类! 图像,接下来要做的是将`x_train``x_test`重塑为 28 x 28 x 1 图像,它们开始出现时的样子,其中前两个维度是图像的高度和宽度(以像素为单位),第三个维度是 每个像素的灰度。 我们还将建立`input_shape`,并将其用于`convNet`的第一层:
由于我们将使用卷积神经网络(`convNet`)对快速抽奖进行分类! 图像,接下来要做的是将`x_train``x_test`重塑为 28 x 28 x 1 图像,它们开始出现时的样子,其中前两个维度是图像的高度和宽度(以像素为单位),第三个维度是每个像素的灰度。 我们还将建立`input_shape`,并将其用于`convNet`的第一层:
```py
x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
......
......@@ -65,7 +65,7 @@ style_path = './tmp/nst/zebra.jpg' # zebra:Yathin S Krishnappa, https://creative
# 预处理图像
下一个功能只需稍作预处理即可加载图像。 `Image.open()`是所谓的惰性操作。 该函数找到文件并将其打开以进行读取,但是实际上直到从您尝试对其进行处理或加载数据以来,才从文件中读取图像数据。 下一组三行会调整图像的大小,以便任一方向的最大尺寸为 512(`max_dimension`)像素。 例如,如果图像为 1,024 x 768,则`scale`将为 0.5(512 / 1,024),并且这将应用于图像的两个尺寸,从而将图像大小调整为 512 x384。`Image.ANTIALIAS`参数 保留最佳图像质量。 接下来,使用`img_to_array()`调用(`tensorflow.keras.preprocessing`的方法)将 PIL 图像转换为 NumPy 数组。
下一个功能只需稍作预处理即可加载图像。 `Image.open()`是所谓的惰性操作。 该函数找到文件并将其打开以进行读取,但是实际上直到从您尝试对其进行处理或加载数据以来,才从文件中读取图像数据。 下一组三行会调整图像的大小,以便任一方向的最大尺寸为 512(`max_dimension`)像素。 例如,如果图像为 1,024 x 768,则`scale`将为 0.5(512 / 1,024),并且这将应用于图像的两个尺寸,从而将图像大小调整为 512 x384。`Image.ANTIALIAS`参数保留最佳图像质量。 接下来,使用`img_to_array()`调用(`tensorflow.keras.preprocessing`的方法)将 PIL 图像转换为 NumPy 数组。
最后,为了与以后的使用兼容,图像需要沿零轴的批次尺寸(由于图像是彩色的,因此共给出了四个尺寸)。 这可以通过调用`np.expand_dims()`实现:
......
......@@ -51,7 +51,7 @@ RNN 的每个单独项目到网络的输入称为**时间步长**。 因此,
展开式循环神经网络
RNN 在称为**沿时间反向传播****BPTT**)的过程中通过反向传播进行训练。 在此可以想象 RNN 的展开(也称为**展开**)会创建一系列神经网络,并且会针对每个时间步长计算误差并将其合并,以便可以将网络中的权重更新为 通常与反向传播。 例如,为了计算梯度,从而计算误差,在时间步`t = 6`时,我们将向后传播五个步,并对梯度求和。 但是,在尝试学习长期依赖关系时(即在相距很远的时间步之间),这种方法存在问题,因为梯度可能变得太小而使学习变得不可能或非常缓慢,或者它们可能变得 太大并淹没了网络。 这被称为消失/爆炸梯度问题,并且已经发明了各种修改方法来解决它,包括**长短期记忆****LSTM**)网络和**门控循环单元****GRU** **s**),我们将在以后使用。
RNN 在称为**沿时间反向传播****BPTT**)的过程中通过反向传播进行训练。 在此可以想象 RNN 的展开(也称为**展开**)会创建一系列神经网络,并且会针对每个时间步长计算误差并将其合并,以便可以使用反向传播更新网络中的权重。 例如,为了计算梯度,从而计算误差,在时间步`t = 6`时,我们将向后传播五个步,并对梯度求和。 但是,在尝试学习长期依赖关系时(即在相距很远的时间步之间),这种方法存在问题,因为梯度可能变得太小而使学习变得不可能或非常缓慢,或者它们可能变得太大并淹没了网络。 这被称为消失/爆炸梯度问题,并且已经发明了各种修改方法来解决它,包括**长短期记忆****LSTM**)网络和**门控循环单元****GRU** **s**),我们将在以后使用。
下图显示了有关展开(或展开)的更多详细信息:
......
......@@ -127,7 +127,7 @@ classifier = tf.estimator.DNNClassifier(
, loss_reduction=tf.compat.v1.losses.Reduction.SUM)
```
现在,我们准备训练模型。 如果您第二次或之后运行`.train`循环,则 Estimator 将从`model_dir`加载其模型参数,并进行进一步的`steps`训练(要完全从头开始,只需删除指定的目录 通过`model_dir`):
现在,我们准备训练模型。 如果您第二次或之后运行`.train`循环,则 Estimator 将从`model_dir`加载其模型参数,并进行进一步的`steps`训练(要完全从头开始,只需通过`model_dir`删除指定的目录):
```py
classifier.train(input_fn=train_input_fn, steps=10000)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册