提交 35fc6b1f 编写于 作者: W wizardforcel

2020-08-07 18:26:09

上级 8ea1bbd3
...@@ -18,13 +18,13 @@ ...@@ -18,13 +18,13 @@
在上图中,我们可以看到如何对旧问题和新问题进行分类。 第一个(线性回归)可以想象为价值不断增长的连续体。 在上图中,我们可以看到如何对旧问题和新问题进行分类。 第一个(线性回归)可以想象为价值不断增长的连续体。
另一个是基于`x`值的输出只能具有两个不同值的域。 在第二张图的特定情况下,我们可以看到对其中一个选项的特定偏向极端:在左侧,偏向 0 `y`值,在右侧偏向某个值。 共 1。 另一个是基于`x`值的输出只能具有两个不同值的域。 在第二张图的特定情况下,我们可以看到对其中一个选项的特定偏向极端:在左侧,`y`值偏向 0,在右侧偏向 1。
鉴于即使在进行回归从而寻找连续值的情况下,这种项也可能有些棘手,实际上,最终目标是为具有离散变量的分类问题建立预测。 鉴于即使在进行回归从而寻找连续值的情况下,这种项也可能有些棘手,实际上,最终目标是为具有离散变量的分类问题建立预测。
此处的关键是要了解我们将获得与类有关的项目的概率,而不是完全离散的值。 此处的关键是要了解我们将获得与类有关的项目的概率,而不是完全离散的值。
# sigmoid 函数的前身 -- Logit 函数 # sigmoid 函数的前身 -- 对率(Logit)函数
在研究逻辑函数之前,我们将回顾该函数所基于的原始函数,并为其提供一些更一般的属性。 在研究逻辑函数之前,我们将回顾该函数所基于的原始函数,并为其提供一些更一般的属性。
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
在尝试建立广义线性模型时,我们要从线性函数开始,并从因变量开始,获取到概率分布的映射。 在尝试建立广义线性模型时,我们要从线性函数开始,并从因变量开始,获取到概率分布的映射。
由于选项具有二元性质,因此通常选择的分布是最近提到的 Bernoulli 分布,而倾向于 logistic 函数的链接函数是`logit`函数。 由于选项具有二元性质,因此通常选择的分布是最近提到的伯努利分布,而倾向于 logistic 函数的链接函数是`logit`函数。
## Logit 函数 ## Logit 函数
...@@ -86,7 +86,7 @@ ...@@ -86,7 +86,7 @@
![Logistic function as a linear modeling generalization](img/00064.jpg) ![Logistic function as a linear modeling generalization](img/00064.jpg)
该方程式的正常解释是`t`代表一个简单的自变量。 但是,我们将改进此模型,并假定`t`是单个解释变量`x`的线性函数(对 t 是多个解释变量的线性组合的情况进行类似处理)。 该方程式的正常解释是`t`代表一个简单的自变量。 但是,我们将改进此模型,并假定`t`是单个解释变量`x`的线性函数(对`t`是多个解释变量的线性组合的情况进行类似处理)。
然后,我们将`t`表示为: 然后,我们将`t`表示为:
...@@ -102,7 +102,7 @@ ...@@ -102,7 +102,7 @@
![Final estimated regression equation](img/00067.jpg) ![Final estimated regression equation](img/00067.jpg)
下图将显示如何将从任意范围的映射最终转换为范围`[0, 1]`,该范围可以解释为表示事件发生的概率 p 下图将显示如何将从任意范围的映射最终转换为范围`[0, 1]`,该范围可以解释为表示事件发生的概率`p`
![Final estimated regression equation](img/00068.jpg) ![Final estimated regression equation](img/00068.jpg)
...@@ -137,7 +137,7 @@ ...@@ -137,7 +137,7 @@
* 第二个由一组概率组成,其中我们代表一个类别相对于所有其他类别的概率。 * 第二个由一组概率组成,其中我们代表一个类别相对于所有其他类别的概率。
* 第二种方法是`softmax`回归的输出格式,它是 n 个类的逻辑回归的概括。 * 第二种方法是`softmax`回归的输出格式,它是 n 个类的逻辑回归的概括。
因此,为了训练样本,我们将使用句柄`y(i)ε{1,...,K},`将二元标签`( y(i)ε{0,1})`更改为向量标签,其中`K`是类别数,标签 Y 可以采用`K`不同的值, 而不是只有两个。 因此,为了训练样本,我们将使用句柄`y(i)ε{1,...,K},`将二元标签`( y(i)ε{0,1})`更改为向量标签,其中`K`是类别数,标签`Y`可以采用`K`不同的值, 而不是只有两个。
因此,对于这种特定技术,给定测试输入`X`,我们想要针对`k=1,...,K`的每个值估计`P``y=k|x`)的概率。 `softmax`回归将输出`K`维向量(其元素总和为 1),从而为我们提供了`K`估计的概率。 因此,对于这种特定技术,给定测试输入`X`,我们想要针对`k=1,...,K`的每个值估计`P``y=k|x`)的概率。 `softmax`回归将输出`K`维向量(其元素总和为 1),从而为我们提供了`K`估计的概率。
...@@ -173,7 +173,7 @@ ...@@ -173,7 +173,7 @@
为了将`softmax`函数用作回归函数,我们必须使用一种称为单热编码的编码。 这种编码形式只是将变量的数字整数值转换为数组,其中将值列表转换为数组列表,每个数组的长度与该列表的最大值相同,并且每个数组的表示方式是在值的索引上添加 1,其余元素保持为 0。 为了将`softmax`函数用作回归函数,我们必须使用一种称为单热编码的编码。 这种编码形式只是将变量的数字整数值转换为数组,其中将值列表转换为数组列表,每个数组的长度与该列表的最大值相同,并且每个数组的表示方式是在值的索引上添加 1,其余元素保持为 0。
例如,这将是单热编码形式的列表[1、3、2、4]的表示形式: 例如,这将是单热编码形式的列表`[1, 3, 2, 4]`的表示形式:
```py ```py
[[0 1 0 0 0] [[0 1 0 0 0]
...@@ -200,7 +200,7 @@ tf.one_hot(indices, depth, on_value=1, off_value=0, axis=None, dtype=tf.float32, ...@@ -200,7 +200,7 @@ tf.one_hot(indices, depth, on_value=1, off_value=0, axis=None, dtype=tf.float32,
`Dtype`是生成的张量的数据类型; 默认值为`float32` `Dtype`是生成的张量的数据类型; 默认值为`float32`
depth 变量定义每个元素将具有多少列。 我们假设它在逻辑上应该为`max(indices) + 1`,但也可以将其切掉。 `depth`变量定义每个元素将具有多少列。 我们假设它在逻辑上应该为`max(indices) + 1`,但也可以将其切掉。
### TensorFlow 的 softmax 实现 ### TensorFlow 的 softmax 实现
......
...@@ -37,12 +37,12 @@ ...@@ -37,12 +37,12 @@
1. 用随机分布初始化权重(通常为低值) 1. 用随机分布初始化权重(通常为低值)
2. 选择一个输入向量并将其呈现给网络, 2. 选择一个输入向量并将其呈现给网络,
3. 为指定的输入向量和权重值计算网络的输出 y' 3. 为指定的输入向量和权重值计算网络的输出`y'`
4. 用于感知机的函数是: 4. 用于感知机的函数是:
![Perceptron algorithm](img/00080.jpg) ![Perceptron algorithm](img/00080.jpg)
5. 如果 y'≠y,则通过添加更改`Δw = yx[i]`修改所有连接`w[i]` 5. 如果`y' ≠ y`,则通过添加更改`Δw = yx[i]`修改所有连接`w[i]`
6. 返回步骤 2。 6. 返回步骤 2。
## 神经网络层 ## 神经网络层
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
![Neural Network activation functions](img/00083.jpg) ![Neural Network activation functions](img/00083.jpg)
* Relu: 这称为整流线性单元,其主要优点之一是它不受“梯度消失”问题的影响,该问题通常存在于网络的第一层,趋向于 0 或很小的 epsilon 值: * Relu: 这称为整流线性单元,其主要优点之一是它不受“梯度消失”问题的影响,该问题通常存在于网络的第一层,趋向于 0 或很小的`epsilon`值:
![Neural Network activation functions](img/00084.jpg) ![Neural Network activation functions](img/00084.jpg)
...@@ -77,7 +77,7 @@ ...@@ -77,7 +77,7 @@
因此,一旦我们计算了总误差,并且将整个函数应用于原始数据,我们现在就必须尝试调整方程式中的所有变量以将其最小化。 因此,一旦我们计算了总误差,并且将整个函数应用于原始数据,我们现在就必须尝试调整方程式中的所有变量以将其最小化。
正如 Optimization 领域所研究的那样,我们需要知道的是能够使该误差最小化的是损失函数的梯度。 正如最优化领域所研究的那样,我们需要知道的是能够使该误差最小化的是损失函数的梯度。
鉴于数据要经过许多权重和传递函数,因此必须通过链式法则来解决合成函数的梯度。 鉴于数据要经过许多权重和传递函数,因此必须通过链式法则来解决合成函数的梯度。
...@@ -99,7 +99,7 @@ ...@@ -99,7 +99,7 @@
TensorFlow 导航中最常用的函数: TensorFlow 导航中最常用的函数:
* `tf.sigmoid(x)`:标准 S函数 * `tf.sigmoid(x)`:标准 Sigmoid 函数
* `tf.tanh(x)`:双曲正切 * `tf.tanh(x)`:双曲正切
* `tf.nn.relu(features)`:Relu 传递函数 * `tf.nn.relu(features)`:Relu 传递函数
...@@ -122,8 +122,8 @@ TensorFlow 损失优化方法如下所述: ...@@ -122,8 +122,8 @@ TensorFlow 损失优化方法如下所述:
让我们看一下以下 Sklearn 预处理实用程序: 让我们看一下以下 Sklearn 预处理实用程序:
* `preprocessing.StandardScaler()`:数据集的正则化是许多机器学习估计器的普遍要求,因此,为了使收敛更加直接,数据集将必须更像是标准正态分布,即具有零均值和单位方差的高斯曲线。 在实践中,我们通常会忽略分布的形状,而只是通过删除每个特征的平均值来变换数据以使其居中,然后通过将非恒定特征除以它们的标准偏差来缩放它。 对于此任务,我们使用 StandardScaler,它实现了前面提到的任务。 它还存储转换,以便能够将其重新应用于测试集。 * `preprocessing.StandardScaler()`:数据集的正则化是许多机器学习估计器的普遍要求,因此,为了使收敛更加直接,数据集将必须更像是标准正态分布,即具有零均值和单位方差的高斯曲线。 在实践中,我们通常会忽略分布的形状,而只是通过删除每个特征的平均值来变换数据以使其居中,然后通过将非恒定特征除以它们的标准偏差来缩放它。 对于此任务,我们使用`StandardScaler`,它实现了前面提到的任务。 它还存储转换,以便能够将其重新应用于测试集。
* `StandardScaler``fit_transform()`:简单地将数据调整为所需格式。 StandardScaler 对象将保存转换变量,因此您将能够取回非规格化数据。 * `StandardScaler``fit_transform()`:简单地将数据调整为所需格式。 `StandardScaler`对象将保存转换变量,因此您将能够取回非规格化数据。
* `cross_validation.train_test_split`:此方法将数据集分为训练和测试段,我们只需要提供分配给每个阶段的数据集的百分比即可。 * `cross_validation.train_test_split`:此方法将数据集分为训练和测试段,我们只需要提供分配给每个阶段的数据集的百分比即可。
# 第一个项目 -- 非线性合成函数回归 # 第一个项目 -- 非线性合成函数回归
...@@ -132,7 +132,7 @@ TensorFlow 损失优化方法如下所述: ...@@ -132,7 +132,7 @@ TensorFlow 损失优化方法如下所述:
用于回归的网络架构与用于分类问题的网络架构没有很大不同:它们可以采用多变量输入,也可以使用线性和非线性激活函数。 用于回归的网络架构与用于分类问题的网络架构没有很大不同:它们可以采用多变量输入,也可以使用线性和非线性激活函数。
在某些情况下,唯一必要的情况是仅在层的末尾删除类似于 S的函数,以允许出现所有选项。 在某些情况下,唯一必要的情况是仅在层的末尾删除类似于 Sigmoid 的函数,以允许出现所有选项。
在第一个示例中,我们将对一个简单的,有噪声的二次函数进行建模,并将尝试通过单个隐藏层网络对其进行回归,并查看我们可以多么接近地预测从测试总体中得出的值。 在第一个示例中,我们将对一个简单的,有噪声的二次函数进行建模,并将尝试通过单个隐藏层网络对其进行回归,并查看我们可以多么接近地预测从测试总体中得出的值。
...@@ -155,7 +155,7 @@ dsY = 0.4* pow(dsX,2) +2 * dsX + np.random.randn(*dsX.shape) * 0.22 + 0.8 ...@@ -155,7 +155,7 @@ dsY = 0.4* pow(dsX,2) +2 * dsX + np.random.randn(*dsX.shape) * 0.22 + 0.8
## 数据集预处理 ## 数据集预处理
该数据集在生成时不需要进行预处理,并且具有良好的属性,例如居中并具有-1,1 x 样本分布。 该数据集在生成时不需要进行预处理,并且具有良好的属性,例如居中并具有`-1, 1`样本分布。
## 建模架构 -- 损失函数描述 ## 建模架构 -- 损失函数描述
...@@ -168,7 +168,7 @@ cost = tf.pow(py_x-Y, 2)/(2) ...@@ -168,7 +168,7 @@ cost = tf.pow(py_x-Y, 2)/(2)
## 损失函数优化器 ## 损失函数优化器
在这种情况下,我们将使用 Gradient Descent 成本优化器,可以通过以下代码调用该优化器: 在这种情况下,我们将使用梯度下降成本优化器,可以通过以下代码调用该优化器:
```py ```py
train_op = tf.train.AdamOptimizer(0.5).minimize(cost) train_op = tf.train.AdamOptimizer(0.5).minimize(cost)
...@@ -261,7 +261,7 @@ Average cost for epoch 9:[[ 0.0007379]] ...@@ -261,7 +261,7 @@ Average cost for epoch 9:[[ 0.0007379]]
## 数据集说明和加载 ## 数据集说明和加载
对于这个问题,我们将分析一个非常著名的,标准的,格式正确的数据集,该数据集将使我们能够分析一个多变量问题:根据离散和连续的一些相关变量来猜测汽车的 mpg 对于这个问题,我们将分析一个非常著名的,标准的,格式正确的数据集,该数据集将使我们能够分析一个多变量问题:根据离散和连续的一些相关变量来猜测汽车的 MPG
这可以被认为是一个玩具,并且有些过时了,但是它将为更复杂的问题铺平道路,并且具有已经被众多书目分析的优势。 这可以被认为是一个玩具,并且有些过时了,但是它将为更复杂的问题铺平道路,并且具有已经被众多书目分析的优势。
...@@ -387,7 +387,7 @@ print(" Total Mean Squared Error: " + str(score)) ...@@ -387,7 +387,7 @@ print(" Total Mean Squared Error: " + str(score))
* 花青素 * 花青素
* 色彩强度 * 色彩强度
* 色调 * 色调
* 稀释酒的 OD280 / OD315 * 稀释酒的 OD280/OD315
* 脯氨酸 * 脯氨酸
要读取数据集,我们将仅使用提供的 CSV 文件和熊猫: 要读取数据集,我们将仅使用提供的 CSV 文件和熊猫:
......
...@@ -102,7 +102,7 @@ tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu, data_format, nam ...@@ -102,7 +102,7 @@ tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu, data_format, nam
* `strides`:这是四个`int`张量数据类型的列表,这些数据类型指示每个维度的滑动窗口。 * `strides`:这是四个`int`张量数据类型的列表,这些数据类型指示每个维度的滑动窗口。
* `Padding`:可以是`SAME``VALID``SAME`将尝试保留初始张量尺寸,但`VALID`将允许其增长,以防计算输出大小和填充。 * `Padding`:可以是`SAME``VALID``SAME`将尝试保留初始张量尺寸,但`VALID`将允许其增长,以防计算输出大小和填充。
* `use_cudnn_on_gpu`:这指示是否使用`CUDA GPU CNN`库来加速计算。 * `use_cudnn_on_gpu`:这指示是否使用`CUDA GPU CNN`库来加速计算。
* `data_format`:这指定数据的组织顺序(NHWC 或 NCWH)。 * `data_format`:这指定数据的组织顺序(`NHWC``NCWH`)。
### 其他卷积运算 ### 其他卷积运算
...@@ -172,7 +172,7 @@ coord.join(threads) ...@@ -172,7 +172,7 @@ coord.join(threads)
在 TensorFlow 中通过称为池的操作执行二次采样操作。 这个想法是应用一个(大小不一的)内核并提取内核覆盖的元素之一,其中`max_pool``avg_pool`是最著名的一些元素,它们仅获得最大和平均值。 应用内核的元素。 在 TensorFlow 中通过称为池的操作执行二次采样操作。 这个想法是应用一个(大小不一的)内核并提取内核覆盖的元素之一,其中`max_pool``avg_pool`是最著名的一些元素,它们仅获得最大和平均值。 应用内核的元素。
在下图中,您可以看到将`2x2`内核应用于单通道 16x16 矩阵的操作。 它只是保持其覆盖的内部区域的最大值。 在下图中,您可以看到将`2x2`内核应用于单通道`16x16`矩阵的操作。 它只是保持其覆盖的内部区域的最大值。
![Subsampling operation - pooling](img/00095.jpg) ![Subsampling operation - pooling](img/00095.jpg)
...@@ -204,7 +204,7 @@ tf.nn.max_pool(value, ksize, strides, padding, data_format, name) ...@@ -204,7 +204,7 @@ tf.nn.max_pool(value, ksize, strides, padding, data_format, name)
* `ksize`:这是一个整数列表,代表每个维度上的窗口大小 * `ksize`:这是一个整数列表,代表每个维度上的窗口大小
* `strides`:这是在每个尺寸上移动窗口的步骤 * `strides`:这是在每个尺寸上移动窗口的步骤
* `data_format`:设置数据尺寸 * `data_format`:设置数据尺寸
* `ordering`NHWC 或 NCHW * `ordering``NHWC``NCHW`
* `padding``VALID``SAME` * `padding``VALID``SAME`
### 其他池化操作 ### 其他池化操作
...@@ -258,23 +258,23 @@ coord.join(threads) ...@@ -258,23 +258,23 @@ coord.join(threads)
![Sample code](img/00096.jpg) ![Sample code](img/00096.jpg)
## 提高效率 - dropout 操作 ## 提高效率 - 丢弃操作
在大型神经网络训练过程中观察到的主要优点之一是过拟合,即为训练数据生成非常好的近似值,但为单点之间的区域发出噪声。 在大型神经网络训练过程中观察到的主要优点之一是过拟合,即为训练数据生成非常好的近似值,但为单点之间的区域发出噪声。
在过拟合的情况下,该模型专门针对训练数据集进行了调整,因此对于一般化将无用。 因此,尽管它在训练集上表现良好,但是由于缺乏通用性,因此它在测试数据集和后续测试中的表现很差。 在过拟合的情况下,该模型专门针对训练数据集进行了调整,因此对于一般化将无用。 因此,尽管它在训练集上表现良好,但是由于缺乏通用性,因此它在测试数据集和后续测试中的表现很差。
因此,引入了 dropout 操作。 此操作将某些随机选择的权重的值减小为零,从而使后续层为零。 因此,引入了丢弃操作。 此操作将某些随机选择的权重的值减小为零,从而使后续层为零。
这种方法的主要优点是,它避免了一层中的所有神经元同步优化其权重。 随机分组进行的这种适应避免了所有神经元都收敛到相同的目标,从而使适应的权重解相关。 这种方法的主要优点是,它避免了一层中的所有神经元同步优化其权重。 随机分组进行的这种适应避免了所有神经元都收敛到相同的目标,从而使适应的权重解相关。
dropout 应用中发现的第二个属性是隐藏单元的激活变得稀疏,这也是理想的特性。 丢弃应用中发现的第二个属性是隐藏单元的激活变得稀疏,这也是理想的特性。
在下图中,我们表示了原始的完全连接的多层神经网络以及具有链接的 dropout 的关联网络: 在下图中,我们表示了原始的完全连接的多层神经网络以及具有链接的丢弃的关联网络:
![Improving efficiency - dropout operation](img/00097.jpg) ![Improving efficiency - dropout operation](img/00097.jpg)
### 在 TensorFlow 中应用 dropout 操作 ### 在 TensorFlow 中应用丢弃操作
为了应用`dropout`操作,TensorFlows 实现了`tf.nn.dropout`方法,其工作方式如下: 为了应用`dropout`操作,TensorFlows 实现了`tf.nn.dropout`方法,其工作方式如下:
...@@ -290,9 +290,9 @@ tf.nn.dropout (x, keep_prob, noise_shape, seed, name) ...@@ -290,9 +290,9 @@ tf.nn.dropout (x, keep_prob, noise_shape, seed, name)
#### 示例代码 #### 示例代码
在此样本中,我们将对样本向量应用 dropout 操作。 Dropout 还可以将 Dropout 传输到所有与架构相关的单元。 在此样本中,我们将对样本向量应用丢弃操作。 丢弃还可以将丢弃传输到所有与架构相关的单元。
在下面的示例中,您可以看到将 dropout 应用于`x`变量的结果,其归零概率为 0.5,并且在未发生这种情况的情况下,值加倍(乘以 1 / 1.5, dropout 概率): 在下面的示例中,您可以看到将丢弃应用于`x`变量的结果,其归零概率为 0.5,并且在未发生这种情况的情况下,值加倍(乘以`1 / 1.5`,丢弃概率):
![Sample code](img/00098.jpg) ![Sample code](img/00098.jpg)
...@@ -357,7 +357,7 @@ MNIST 是易于理解和阅读但难以掌握的数据集。 当前,有很多 ...@@ -357,7 +357,7 @@ MNIST 是易于理解和阅读但难以掌握的数据集。 当前,有很多
![Dataset description and loading](img/00101.jpg) ![Dataset description and loading](img/00101.jpg)
要打印字符(在 Jupyter Notebook 中),我们将重塑表示图像的线性方式,形成`28x28`的方矩阵,分配灰度色图,并使用以下行绘制所得的数据结构: 要打印字符(在 Jupyter 笔记本中),我们将重塑表示图像的线性方式,形成`28x28`的方矩阵,分配灰度色图,并使用以下行绘制所得的数据结构:
```py ```py
plt.imshow(mnist.train.images[0].reshape((28, 28), order='C'), cmap='Greys', interpolation='nearest') plt.imshow(mnist.train.images[0].reshape((28, 28), order='C'), cmap='Greys', interpolation='nearest')
......
...@@ -74,7 +74,7 @@ LSTM 单元格的一般结构 ...@@ -74,7 +74,7 @@ LSTM 单元格的一般结构
### 第 1 部分 -- 设置要忘记的值(输入门) ### 第 1 部分 -- 设置要忘记的值(输入门)
在本节中,我们将采用来自短期的值,再加上输入本身,并且这些值将由多元 S 型表示的二元函数的值设置。 根据输入和短期记忆值,S输出将允许或限制一些先前的知识或单元状态中包含的权重。 在本节中,我们将采用来自短期的值,再加上输入本身,并且这些值将由多元 S 型表示的二元函数的值设置。 根据输入和短期记忆值,Sigmoid 输出将允许或限制一些先前的知识或单元状态中包含的权重。
![Part 1 - set values to forget (input gate)](img/00110.jpg) ![Part 1 - set values to forget (input gate)](img/00110.jpg)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册