提交 d211aac9 编写于 作者: W wizardforcel

2020-12-29 21:38:25

上级 ff332605
......@@ -364,7 +364,7 @@ CIFAR 数据集是机器学习数据集,其中包含按不同类别组织的
请在`Code/Lesson-1/activity_2/`中使用`mnist.py`文件作为参考。 在代码编辑器中打开脚本。
在这里,我们还有两个 TensorFlow 变量`W``B`。 请注意,这些变量的初始化非常简单:`W`被初始化为修剪后的高斯分布(修剪过`size_in``size_out`)的随机值,标准偏差为`0.1,``B` 术语)初始化为`0.1`(常数)。 这两个值在每次运行期间都会不断变化。 该代码段执行两次,产生两个全连接网络-一个将数据传递到另一个。
在这里,我们还有两个 TensorFlow 变量`W``B`。 请注意,这些变量的初始化非常简单:`W`被初始化为修剪后的高斯分布(修剪过`size_in``size_out`)的随机值,标准偏差为`0.1,``B`)初始化为`0.1`(常数)。 这两个值在每次运行期间都会不断变化。 该代码段执行两次,产生两个全连接网络-一个将数据传递到另一个。
那 11 行 Python 代码代表了我们完整的神经网络。 我们将在“第 2 课”,“模型架构”中详细介绍使用 Keras 的每个组件。 目前,应重点了解网络在每次运行时都会改变每个层中的`W``B`值,以及这些代码片段如何形成不同的层。 这 11 行 Python 是数十年来神经网络研究的高潮。
......
......@@ -43,11 +43,11 @@
神经网络利用函数来测量与验证集相比网络的运行情况,也就是说,一部分数据被分离为,用作训练过程的一部分。 这些函数称为**损失函数**
损失函数评估神经网络预测的*误差*; 然后他们会将这些错误传播回去并调整网络,从而修改单个神经元的激活方式。 损失函数是神经网络的关键组成部分,选择正确的损失函数可能会对网络的性能产生重大影响。
损失函数评估神经网络预测的*误差*; 然后他们会将这些误差传播回去并调整网络,从而修改单个神经元的激活方式。 损失函数是神经网络的关键组成部分,选择正确的损失函数可能会对网络的性能产生重大影响。
错误如何传播到网络中的每个神经元?
误差如何传播到网络中的每个神经元?
错误通过称为反向传播的过程传播。 反向传播是一种将损失函数返回的错误传播回神经网络中每个神经元的技术。 传播的错误会影响神经元的激活方式,并最终影响神经网络的输出。
误差通过称为反向传播的过程传播。 反向传播是一种将损失函数返回的误差传播回神经网络中每个神经元的技术。 传播的误差会影响神经元的激活方式,并最终影响神经网络的输出。
许多神经网络包,包括 Keras,默认情况下都使用此技术。
......@@ -205,7 +205,7 @@ Keras 提供了`model.evaluate(),`方法,该方法使针对测试集评估训
### 模型预测
一件事是测量我们的模型,比较 MSE 错误,另一件事是能够直观地解释其结果。
一件事是测量我们的模型,比较 MSE 误差,另一件事是能够直观地解释其结果。
使用相同的模型,我们现在使用 76 周作为输入来创建接下来几周的一系列预测。 通过在整个序列(即训练和测试集)上滑动 76 周的窗口,并对每个窗口进行预测,我们可以做到这一点。 预测是使用`Keras model.predict()`方法完成的:
......@@ -251,7 +251,7 @@ Keras 提供了`model.evaluate(),`方法,该方法使针对测试集评估训
> “代码段 6”:使用反向点相对归一化技术对数据进行归一化。 `denormalize()`函数从测试的等效一周的第一天起收取第一个收盘价。
现在,我们的结果使用美元将预测值与测试集进行比较。 从“图 5”中可以看出,`bitcoin_lstm_v0` 模型在预测接下来的 7 天比特币价格时似乎表现良好。 但是,我们如何用可解释的术语衡量表现呢?
现在,我们的结果使用美元将预测值与测试集进行比较。 从“图 5”中可以看出,`bitcoin_lstm_v0` 模型在预测接下来的 7 天比特币价格时似乎表现良好。 但是,我们如何用可解释的衡量表现呢?
![Model Predictions](img/image03_09.jpg)
......
......@@ -49,7 +49,7 @@
![](img/0c7acdb6-ec47-439a-bf52-852b0d82256a.png)
如您所见,元 SGD 只是对 MAML 的一小部分调整。 在 MAML 中,我们随机初始化模型参数`θ`,并尝试找到可跨任务通用的最佳参数。 在元 SGD 中,我们不仅学习模型参数`θ`,还学习了学习率和更新方向,这在适应性术语中隐含地实现。
如您所见,元 SGD 只是对 MAML 的一小部分调整。 在 MAML 中,我们随机初始化模型参数`θ`,并尝试找到可跨任务通用的最佳参数。 在元 SGD 中,我们不仅学习模型参数`θ`,还学习了学习率和更新方向,这在适应性中隐含地实现。
# 用于监督学习的元 SGD
......
......@@ -28,7 +28,7 @@ TD 学习算法由 Sutton 于 1988 年提出。该算法兼顾了蒙特卡洛方
如果您直观地想到此方程,则实际上是实际奖励(`r + γV(s')`)和预期奖励(`V(s)`)之间的差乘以学习率`α`。 学习率代表什么? 学习速率(也称为步长)对于收敛很有用。
你注意到了吗? 由于我们将实际值和预测值之差作为`r + γV(s') - V(s)`,因此实际上是一个错误。 我们可以称其为 TD 错误。 在多次迭代中,我们将尝试最小化此错误
你注意到了吗? 由于我们将实际值和预测值之差作为`r + γV(s') - V(s)`,因此实际上是一个误差。 我们可以称其为 TD 误差。 在多次迭代中,我们将尝试最小化此误差
让我们通过前面几章中的冰湖示例来了解 TD 预测。 接下来显示的是冰冻的湖泊环境。 首先,对于所有状态,我们将值函数初始化为`0`,就像在`V(S)`中将其初始化为`0`一样,如以下状态值图所示 :
......
......@@ -410,7 +410,7 @@ with tf.Session() as sess:
# 优先经验回放
在 DQN 架构中,我们使用经验回放来消除训练样本之间的相关性。 但是,从记忆回放中均匀采样转移不是最佳方法。 相反,我们可以确定转换的优先级并根据优先级进行采样。 优先安排转移有助于网络快速有效地学习。 我们如何确定转移的优先级? 我们优先考虑具有较高 TD 错误的转换。 我们知道,TD 误差指定了估计的 Q 值和实际 Q 值之间的差。 因此,具有较高 TD 误差的转移是我们必须关注和学习的转移,因为这些转移与我们的估计背道而驰。 凭直觉,让我们说您尝试解决一系列问题,但是您无法解决其中两个问题。 然后,您仅将这两个问题放在首位,以专注于问题所在并尝试解决该问题:
在 DQN 架构中,我们使用经验回放来消除训练样本之间的相关性。 但是,从记忆回放中均匀采样转移不是最佳方法。 相反,我们可以确定转换的优先级并根据优先级进行采样。 优先安排转移有助于网络快速有效地学习。 我们如何确定转移的优先级? 我们优先考虑具有较高 TD 误差的转换。 我们知道,TD 误差指定了估计的 Q 值和实际 Q 值之间的差。 因此,具有较高 TD 误差的转移是我们必须关注和学习的转移,因为这些转移与我们的估计背道而驰。 凭直觉,让我们说您尝试解决一系列问题,但是您无法解决其中两个问题。 然后,您仅将这两个问题放在首位,以专注于问题所在并尝试解决该问题:
![](img/00272.gif)
......@@ -430,7 +430,7 @@ with tf.Session() as sess:
![](img/00283.jpeg)
`rank(i)`指定转移`i`在回放缓冲区中的位置,在该位置中,转移从高 TD 错误到低 TD 错误被分类。 计算优先级后,我们可以使用相同的公式将优先级转换为概率:
`rank(i)`指定转移`i`在回放缓冲区中的位置,在该位置中,转移从高 TD 误差到低 TD 误差被分类。 计算优先级后,我们可以使用相同的公式将优先级转换为概率:
![](img/00284.jpeg)
......
......@@ -582,7 +582,7 @@ Kakade 和 Langford 从`(1)`得出以下方程式:
如果我们仔细观察前面的方程式`(2)`,我们会注意到,只要右侧最大化,我们的预期长期回报`η`就会单调增加。
让我们将此右侧术语定义为`M[i](π)`,如下所示:
让我们将此右侧定义为`M[i](π)`,如下所示:
![](img/00363.jpeg) ----(3)
......
......@@ -76,7 +76,7 @@ DQfd 中的损失函数将是各种损失的总和。 为了防止我们的智
# 事后经验回放
我们已经了解了如何在 DQN 中使用经验回放来避免相关经验。 此外,我们了解到,优先经验回放是对原始经验回放的一种改进,因为它优先考虑 TD 错误的每个经验。 现在,我们将研究由 OpenAI 研究人员提出的一种用于处理稀疏奖励的名为**事后经验回放****HER**)的新技术。 您还记得如何学习骑自行车吗? 第一次尝试时,您将无法正确平衡自行车。 您可能多次无法正确平衡。 但是,所有这些失败并不意味着您没有学到任何东西。 失败会教你如何不平衡自行车。 即使您没有学会骑自行车(目标),您也学习了一个不同的目标,即,您学会了如何不平衡自行车。 这是我们人类学习的方式,对吗? 我们从失败中学习,这就是事后回顾经验的想法。
我们已经了解了如何在 DQN 中使用经验回放来避免相关经验。 此外,我们了解到,优先经验回放是对原始经验回放的一种改进,因为它优先考虑 TD 误差的每个经验。 现在,我们将研究由 OpenAI 研究人员提出的一种用于处理稀疏奖励的名为**事后经验回放****HER**)的新技术。 您还记得如何学习骑自行车吗? 第一次尝试时,您将无法正确平衡自行车。 您可能多次无法正确平衡。 但是,所有这些失败并不意味着您没有学到任何东西。 失败会教你如何不平衡自行车。 即使您没有学会骑自行车(目标),您也学习了一个不同的目标,即,您学会了如何不平衡自行车。 这是我们人类学习的方式,对吗? 我们从失败中学习,这就是事后回顾经验的想法。
让我们考虑本文中给出的相同示例。 如图所示,查看 FetchSlide 环境。 在这种环境下的目标是移动机械臂并在桌子上滑动冰球以击中目标,这是一个红色的小圆圈(来自[的图表 https://blog.openai.com/ingredients-for-robotics-research /](https://blog.openai.com/ingredients-for-robotics-research/) ):
......
......@@ -3,7 +3,7 @@
# 第 1 章
1. 强化学习(**RL**)是机器学习的一个分支,其中学习是通过与环境交互来进行的。
2. 与其他 ML 范例不同,RL 通过训练和错误方法工作。
2. 与其他 ML 范例不同,RL 通过训练和误差方法工作。
3. 智能体是做出明智决策的软件程序,它们基本上是 RL 的学习器。
4. 策略函数指定在每个状态下要执行的操作,而值函数指定每个状态的值。
5. 在基于模型的智能体中,使用以前的经验,而在无模型的学习中,则不会有任何以前的经验。
......@@ -80,7 +80,7 @@
3. 当我们使用同一网络来预测目标值和预测值时,会有很多差异,因此我们使用单独的目标网络。
4. 由于最大运算符,DQN 高估了 Q 值。
5. 通过具有两个单独的 Q 函数,每个学习都独立地加倍 DQN,从而避免了高估 Q 值的情况。
6. 经验是优先经验回放中基于 TD 错误的优先级。
6. 经验是优先经验回放中基于 TD 误差的优先级。
7. DQN 通过将 Q 函数计算分解为值函数和优势函数来精确估算 Q 值。
# 第 9 章
......
......@@ -206,7 +206,7 @@ ReLU 的限制条件之一是其输入负值的零梯度。 这可能会减慢
![](img/8c25c79b-a37b-455f-95cc-e0501608846b.png)
正如您在前面的表达式中看到的那样,导数不过是预测中的错误。 通常,在存在回归问题的情况下,输出单元激活函数是线性的,因此适用以下表达式:
正如您在前面的表达式中看到的那样,导数不过是预测中的误差。 通常,在存在回归问题的情况下,输出单元激活函数是线性的,因此适用以下表达式:
![](img/714abd7d-0c22-40db-80f2-bfc0e479ef6a.png)
......@@ -220,7 +220,7 @@ ReLU 的限制条件之一是其输入负值的零梯度。 这可能会减慢
![](img/34c1605c-eb43-4d09-b029-b8177ecd1dc6.png)
如您所见,相对于最终输出层之前的层中的权重,该错误在计算成本函数的梯度时反向传播。 当我们计算成本函数相对于广义权重的梯度`w[jk]^(2)`时,这变得更加明显。 取对应于`j = 1``k = 2`的权重; 即`w[jk]^(2)`。 成本函数`C`相对于该权重的梯度可以表示为:
如您所见,相对于最终输出层之前的层中的权重,该误差在计算成本函数的梯度时反向传播。 当我们计算成本函数相对于广义权重的梯度`w[jk]^(2)`时,这变得更加明显。 取对应于`j = 1``k = 2`的权重; 即`w[jk]^(2)`。 成本函数`C`相对于该权重的梯度可以表示为:
![](img/474751ea-71f8-4c57-9d16-1679ed2fbea5.png)
......@@ -290,7 +290,7 @@ ReLU 的限制条件之一是其输入负值的零梯度。 这可能会减慢
如果我们要预测句子中的下一个单词,则函数`f[2]`通常是词汇表中单词的 softmax 函数。 根据当前问题,`f[1]`函数可以是任何激活函数。
在 RNN 中,步骤`t`中的输出错误会尝试纠正先前时间步中的预测,并通过`k ∈ 1, 2, ..., t-1`来概括。 通过传播先前时间步长中的错误来实现。 这有助于 RNN 了解彼此相距较远的单词之间的长期依赖性。 实际上,由于梯度问题的消失和爆炸,并非总是可能通过 RNN 学习这么长的依赖关系。
在 RNN 中,步骤`t`中的输出误差会尝试纠正先前时间步中的预测,并通过`k ∈ 1, 2, ..., t-1`来概括。 通过传播先前时间步长中的误差来实现。 这有助于 RNN 了解彼此相距较远的单词之间的长期依赖性。 实际上,由于梯度问题的消失和爆炸,并非总是可能通过 RNN 学习这么长的依赖关系。
如您所知,神经网络通过梯度下降来学习,并且可以通过以下步骤来学习单词在时间步`t`与在先序列步`k`之间的关系。 记忆状态`h[t]^(i)`相对于记忆状态`h[i]^(t)`的梯度。 用以下公式表示:
......@@ -328,7 +328,7 @@ ReLU 的限制条件之一是其输入负值的零梯度。 这可能会减慢
![](img/16cfb5c1-3e84-497e-8725-fc5c0e571a30.png)
潜在的新候选细胞状态`C_tilde[t]`表示如下:
潜在的新候选单元状态`C_tilde[t]`表示如下:
![](img/d10b017e-3e19-4c63-8ece-90ca7b3d2dfe.png)
......@@ -348,7 +348,7 @@ ReLU 的限制条件之一是其输入负值的零梯度。 这可能会减慢
![](img/0467935c-2261-4019-86e5-d5cb976fdcfb.png)
现在,单元状态单元的递归由以下给出:
现在,单元状态单元的循环由以下给出:
![](img/eb7d80c6-f2eb-44c2-8272-555b5611da6d.png)
......
......@@ -92,7 +92,7 @@
![](img/0c2ae574-b0cc-4cc5-8dc7-51ddcce904f8.png)
图 2.3:Kappa 指标术语
图 2.3:Kappa 指标
真实标签为*橙子*,假设标签之间具有独立性时,预测*苹果*的预期计数由以下公式给出:
......@@ -195,7 +195,7 @@ def get_im_cv2(path,dim=224):
这里, `M = R^(2x2)`是仿射变换矩阵, `b = [b[1], b[2]]^T ∈ R^2`是翻译向量。
术语`b[1]`指定沿一个空间方向的翻译,而`b[2]`提供沿另一空间维度的翻译。
`b[1]`指定沿一个空间方向的翻译,而`b[2]`提供沿另一空间维度的翻译。
这些转换是必需的,因为神经网络通常不是平移不变,旋转不变或尺度不变。 合并操作确实提供了一些平移不变性,但是通常这还不够。 神经网络不会将图像中特定位置的一个对象和另一图像中平移位置的相同对象视为同一事物。 这就是为什么我们需要在不同平移位置的图像的多个实例,以使神经网络更好地学习。 相同的解释适用于旋转和缩放。
......
......@@ -418,7 +418,7 @@ NMT 与其他传统方法相比的一些优点如下:
# 定义神经机器翻译的模型
如前所述,编码器将通过 LSTM 处理源输入序列,并将源文本编码为有意义的摘要。 有意义的摘要将存储在最后的序列步骤中,即隐藏和单元状态`h[f]``c[f]`。 这些向量在一起(即`[h[f]; c[f]]`)提供了有关源文本的有意义上下文,并且训练了解码器来产生具有隐藏和细胞状态向量的目标序列`[h[f]; c[f]]`
如前所述,编码器将通过 LSTM 处理源输入序列,并将源文本编码为有意义的摘要。 有意义的摘要将存储在最后的序列步骤中,即隐藏和单元状态`h[f]``c[f]`。 这些向量在一起(即`[h[f]; c[f]]`)提供了有关源文本的有意义上下文,并且训练了解码器来产生具有隐藏和单元状态向量的目标序列`[h[f]; c[f]]`
下图所示“图 3.5”是英语到法语翻译的训练过程的详细图。 英文句子`It's a beautiful day`通过 LSTM 转换为含义摘要,然后存储在隐藏和单元格状态向量`[h[f]; c[f]]`中。 然后使解码器根据嵌入在`[h[f]; c[f]]`中的信息,以输入源语句为条件,生成自己的目标序列。 给定源句,使在时间步`t`的解码器预测下一个目标单词,即在时间步`t + 1`的单词。 这就是为什么目标输入字和目标输出字之间有一个时间步长的滞后的原因。 对于第一步,解码器在目标文本序列中没有任何先前的单词,因此可用于预测目标单词的唯一信息是以`[h[f]; c[f]]`,作为初始隐藏和单元状态向量提供。 像编码器一样,解码器也使用 LSTM,并且如上所述,输出目标序列比输入目标序列提前一个时间步长:
......
......@@ -45,7 +45,7 @@ L2 范数下的重建损失可以表示为:
![](img/db0f4732-8246-4e5f-ab9f-d680b444e478.png)
由于我们正在处理图像,因此可以假设`x[A]`是所有像素的扁平向量,以符合 L2 规范术语。 如果我们假设`x[A]`是矩阵,则最好将`||·||_2^2`称为 **Frobenius 范数**。 但是,这些只是数学术语,实质上,我们只是将原始图像和重建图像之间的像素值差的平方和求和。
由于我们正在处理图像,因此可以假设`x[A]`是所有像素的扁平向量,以符合 L2 规范。 如果我们假设`x[A]`是矩阵,则最好将`||·||_2^2`称为 **Frobenius 范数**。 但是,这些只是数学术语,实质上,我们只是将原始图像和重建图像之间的像素值差的平方和求和。
让我们考虑一下生成器在使变换后的图像`x[AB]`追求时要尽量降低成本的做法。 鉴别者将尝试将图像标记为伪图像,因此生成器`G[AB]`应当在这种情况下产生`x[AB]`使其成为假图片的对数丢失的方式尽可能小。 如果域`B`中的鉴别符`D[B]`将真实图像标记为`1`,将伪图像标记为`0`,则图像真实的概率由`D[B](.)`,则生成器应使`x[AB]`在判别器网络下极有可能出现,从而使`D[B](x[B]) = D[B](G[AB](x[A]))`接近`1`)。 就对数损失而言,生成器应使先前概率的负对数最小化,这基本上使我们得到`C[D(AB)]`,如下所示:
......
......@@ -71,7 +71,7 @@ o1, o2, . . . . . ot . . . oN = { "A ","man" "in" "a" "yellow" "helmet" "is" "wo
`N + 1`时间步长处,馈送到第二 LSTM 的单词`w[N]`是由`<bos>`表示的句子的开头。 一旦生成句子符号`<eos>`的结尾,就训练网络停止生成标题词。 总而言之,两个 LSTM 的设置方式是,一旦它们处理完所有视频图像帧特征 ![](img/8ad769e2-57c1-4581-98e1-7c7f70a12413.png),它们便开始产生文本标题词。
处理时间步`t > N`的第二个 LSTM 输入的另一种方法是只喂`w[t-1]`而不是`h[t], w[t-1]`,并在时间步`T`传递第一个 LSTM 的隐藏状态和单元状态`h[T], c[T]`,到第二个 LSTM 的初始隐藏和细胞状态。 这样的视频字幕网络的架构可以说明如下(请参见“图 5.4”):
处理时间步`t > N`的第二个 LSTM 输入的另一种方法是只喂`w[t-1]`而不是`h[t], w[t-1]`,并在时间步`T`传递第一个 LSTM 的隐藏状态和单元状态`h[T], c[T]`,到第二个 LSTM 的初始隐藏和单元状态。 这样的视频字幕网络的架构可以说明如下(请参见“图 5.4”):
![](img/f2805f4e-f512-4272-8988-4c3b2b73a400.png)
......
......@@ -154,7 +154,7 @@ model.fit([X_train[:,0],X_train[:,1]], y_train, nb_epoch=30, validation_data=([X
```
该模型已设置为存储有关验证错误的最佳模型。 从训练日志中可以看出,该模型收敛于大约`0.8872`的验证 RMSE,如下所示:
该模型已设置为存储有关验证误差的最佳模型。 从训练日志中可以看出,该模型收敛于大约`0.8872`的验证 RMSE,如下所示:
```py
Train on 64000 samples, validate on 16000 samples
......@@ -343,7 +343,7 @@ RBM 的参数是可见层单位`i`与隐藏层单位之间的广义权重连接`
![](img/2f08b2c0-b2cf-4e04-abda-de583497996c.png)
术语`E[.]`表示对隐藏和可见单位的联合概率分布的任何给定数量的期望。 另外,`h_hat`表示给定可见单位`v`的采样的隐藏层输出。 在梯度下降的每次迭代中计算联合概率分布的期望在计算上是棘手的。 我们将采用下一节中讨论的称为**对比发散**的智能方法来计算期望值。
`E[.]`表示对隐藏和可见单位的联合概率分布的任何给定数量的期望。 另外,`h_hat`表示给定可见单位`v`的采样的隐藏层输出。 在梯度下降的每次迭代中计算联合概率分布的期望在计算上是棘手的。 我们将采用下一节中讨论的称为**对比发散**的智能方法来计算期望值。
# 对比散度
......
......@@ -255,7 +255,7 @@ Keras 中的`TimeDistributed`函数允许在解码器 LSTM 的每个时间步长
![](img/81b811e5-db95-4cf3-9d09-b9a0c7bff88e.png)
标签`[y[i]], i = 1 -> N`代表目标单词的单热编码版本。 仅对应于实际单词的标签为`1`; 其余为`0`术语`Pi`表示实际目标单词是由`i`索引的单词的概率。 为了获得每个输入/输出推特对的总损耗`C`,我们需要对解码器 LSTM 的所有时间步长上的损耗求和。 由于词汇量可能会变得很大,因此在每个时间步骤中为目标标签创建单热编码向量`y[t] = [y[i]], i = 1 -> n`会很昂贵。 `sparse_categorical_crossentropy`损失在这里变得非常有益,因为我们不需要将目标单词转换为单热编码向量,而只需输入目标单词的索引作为目标标签即可。
标签`[y[i]], i = 1 -> N`代表目标单词的单热编码版本。 仅对应于实际单词的标签为`1`; 其余为`0``Pi`表示实际目标单词是由`i`索引的单词的概率。 为了获得每个输入/输出推特对的总损耗`C`,我们需要对解码器 LSTM 的所有时间步长上的损耗求和。 由于词汇量可能会变得很大,因此在每个时间步骤中为目标标签创建单热编码向量`y[t] = [y[i]], i = 1 -> n`会很昂贵。 `sparse_categorical_crossentropy`损失在这里变得非常有益,因为我们不需要将目标单词转换为单热编码向量,而只需输入目标单词的索引作为目标标签即可。
# 训练模型
......@@ -305,7 +305,7 @@ def include_start_token(self,Y):
return Y
```
回到训练函数`train_model`,我们看到如果`10`时期的损失没有减少,可以使用`EarlyStopping`回调工具启用提前停止。 类似地,如果错误没有在两个时期内减少,则`ReduceLROnPlateau`回调会将现有学习率降低一半(`0.5`)。 只要错误在某个时期减少,就会通过`ModelCheckpoint`回调保存模型。
回到训练函数`train_model`,我们看到如果`10`时期的损失没有减少,可以使用`EarlyStopping`回调工具启用提前停止。 类似地,如果误差没有在两个时期内减少,则`ReduceLROnPlateau`回调会将现有学习率降低一半(`0.5`)。 只要误差在某个时期减少,就会通过`ModelCheckpoint`回调保存模型。
# 从模型生成输出响应
......
......@@ -656,7 +656,7 @@ python captcha_gan.py train --dest_train '/home/santanu/Downloads/train_32x32.ma
| `dis_input_dim` | `(32,32,3)` | 辨别真假房屋号码图像的形状。 |
| `dis_lr` | `0.001` | 判别器网络的学习率。 |
| `dis_beta1` | `0.5` | `beta_1`是用于判别器的 Adam 优化器的参数。 |
| `alpha` | `0.2` | 这是`LeakyReLU`激活的泄漏因子。 当`activation`函数的输入为负时,这有助于提供一个梯度(此处为`0.2`)。 它有助于解决垂死的`ReLU`问题。 如果输入小于或等于`0`,则 ReLU 函数的输出相对于其输入的梯度为`0`。 来自较后层的反向传播错误被此`0`乘以,尽管与该`ReLU.` ReLU 相关的神经元死亡,但没有错误传递至较早层。ReLU 已死亡,许多此类死亡`ReLUs`会影响训练 。 `LeakyReLU`通过甚至为负输入值提供小的梯度来克服了这个问题,从而确保训练不会由于缺乏梯度而停止。 |
| `alpha` | `0.2` | 这是`LeakyReLU`激活的泄漏因子。 当`activation`函数的输入为负时,这有助于提供一个梯度(此处为`0.2`)。 它有助于解决垂死的`ReLU`问题。 如果输入小于或等于`0`,则 ReLU 函数的输出相对于其输入的梯度为`0`。 来自较后层的反向传播误差被此`0`乘以,尽管与该`ReLU.` ReLU 相关的神经元死亡,但没有误差传递至较早层。ReLU 已死亡,许多此类死亡`ReLUs`会影响训练 。 `LeakyReLU`通过甚至为负输入值提供小的梯度来克服了这个问题,从而确保训练不会由于缺乏梯度而停止。 |
| `epochs` | `100` | 这是要运行的时期数。 |
| `smooth_coef` | `0.1` | 设计该平滑系数的目的是减少真实样本对判别器的损失。 例如,`0.1``smooth_coef`可以将归因于真实图像的损失减少到原始损失的 90%。 这有助于 GAN 更好地融合。 |
......
......@@ -300,7 +300,7 @@ RFE 是我们将使用`RandomForestClassifier`模型的第三种技术,请记
# 通过特征工程改进模型
现在,我们已经了解了特征工程技术如何帮助构建预测模型,让我们尝试改善这些模型的性能,并评估新构建的模型是否比先前构建的模型更好地工作。 然后,我们将讨论在进行预测分析时必须始终牢记的两个非常重要的概念,它们是预测模型中可减少和不可减少的错误
现在,我们已经了解了特征工程技术如何帮助构建预测模型,让我们尝试改善这些模型的性能,并评估新构建的模型是否比先前构建的模型更好地工作。 然后,我们将讨论在进行预测分析时必须始终牢记的两个非常重要的概念,它们是预测模型中可减少和不可减少的误差
首先导入所需的模块,如以下屏幕截图所示:
......@@ -356,10 +356,10 @@ RFE 是我们将使用`RandomForestClassifier`模型的第三种技术,请记
# 可减少和不可减少的误差
在继续进行之前,预测分析要涵盖两个非常重要的概念。 错误可以分为以下两种类型:
在继续进行之前,预测分析要涵盖两个非常重要的概念。 误差可以分为以下两种类型:
* **可减少的误差**:可以通过对模型进行某些改进来减少这些错误
* **无法减少的误差**:完全无法减少这些错误
* **可减少的误差**:可以通过对模型进行某些改进来减少这些误差
* **无法减少的误差**:完全无法减少这些误差
假设在机器学习中,特征与目标之间存在由函数表示的关系,如以下屏幕截图所示:
......@@ -377,7 +377,7 @@ RFE 是我们将使用`RandomForestClassifier`模型的第三种技术,请记
![](img/ba4c0671-5d52-4204-806c-85b9c4ecfcd9.png)
现在,**不可减少的误差**项是该随机项的方差。 您对此词没有任何控制权。 总会有一个不可减少的错误成分。 因此,您的模型总是会出错; 无论您拥有多少个特征和数据点,您的模型都不能总是 100% 正确的。 我们必须尝试使用​​更好和更复杂的方法来执行特征工程,并尝试将我们的估计近似为真实函数。 仅仅因为您使用的是更复杂的模型或您有更多的数据,您的模型就不会是完美的,并且您将无法准确预测`y`是什么,因为几乎所有过程都存在需要处理的随机性。 这是一个非常有趣的部分的结尾。
现在,**不可减少的误差**项是该随机项的方差。 您对此词没有任何控制权。 总会有一个不可减少的误差成分。 因此,您的模型总是会出错; 无论您拥有多少个特征和数据点,您的模型都不能总是 100% 正确的。 我们必须尝试使用​​更好和更复杂的方法来执行特征工程,并尝试将我们的估计近似为真实函数。 仅仅因为您使用的是更复杂的模型或您有更多的数据,您的模型就不会是完美的,并且您将无法准确预测`y`是什么,因为几乎所有过程都存在需要处理的随机性。 这是一个非常有趣的部分的结尾。
# 总结
......
......@@ -17,7 +17,7 @@ TensorFlow 1.x 版本强烈支持低级和中级 API,以构建机器学习模
# 技术要求
假定本章和本书的读者都知道机器学习,神经网络和深度神经网络的基础知识。 另外,作为前提条件,假设读者知道 TensorFlow 1.x API。 此外,还需要对深度神经网络中的卷积层,递归层和前馈层有基本的了解。
假定本章和本书的读者都知道机器学习,神经网络和深度神经网络的基础知识。 另外,作为前提条件,假设读者知道 TensorFlow 1.x API。 此外,还需要对深度神经网络中的卷积层,循环层和前馈层有基本的了解。
# 比较 Keras 和`tf.keras`
......@@ -51,7 +51,7 @@ TensorFlow 建立深度学习模型并对其进行训练时的理念是,首先
在本节中,我们将学习`tf.keras` API 的三种主要类型,以定义神经网络层,即:
* **顺序 API** :这些基于堆叠的 NN 层,可以是密集(前馈)层,卷积层或递归层)
* **顺序 API** :这些基于堆叠的 NN 层,可以是密集(前馈)层,卷积层或循环层)
* **函数式 API** :这些有助于构建复杂的模型
* **模型子类 API** :这些是完全可自定义的模型; 这些 API 灵活,需要谨慎编写
......@@ -63,7 +63,7 @@ TensorFlow 建立深度学习模型并对其进行训练时的理念是,首先
# 顺序 API
顺序 API 是创建 TF 模型并提供大约 70-75% 模型类型的最简单方法。 您需要创建一个`tf.keras.models.Sequential(...)` Python 类并将所需的层顺序添加到模型中-这也称为**层栈**。 这些层可能是密集,卷积甚至是递归层。 您可能需要提供第一层的输入形状。 以下是使用顺序 API 创建 TF 模型的步骤:
顺序 API 是创建 TF 模型并提供大约 70-75% 模型类型的最简单方法。 您需要创建一个`tf.keras.models.Sequential(...)` Python 类并将所需的层顺序添加到模型中-这也称为**层栈**。 这些层可能是密集,卷积甚至是循环层。 您可能需要提供第一层的输入形状。 以下是使用顺序 API 创建 TF 模型的步骤:
1. 创建一个`Sequential`模型类:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册