提交 25e823c5 编写于 作者: W wizardforcel

2020-12-17 22:13:18

上级 d7ed6388
......@@ -250,7 +250,7 @@ DialogFlow 中的开发利用了我们之前讨论的两个主要概念-意向
让我们创建我们的第一个意图。 我们可以使用控制台执行此操作。 确保您还填写了**训练短语**表格。 这些是我们期望用户触发这些意图的句子。 我们在构造这些句子时越精确,越全面,那么聊天机器人在识别意图方面将越成功。
现在,我们可以通过插入更多意图为聊天机器人添加更多功能来进行操作。 我们可以使用右侧的帮助程序连续测试我们的聊天机器人。
现在,我们可以通过插入更多意图为聊天机器人添加更多功能来进行操作。 我们可以使用右侧的助手连续测试我们的聊天机器人。
希望很明显,仅使用意图就可以创建功能强大的聊天机器人。 DialogFlow 正在为我们完成大部分繁重的工作。 为了使聊天机器人更加强大,我们可以开始向意图添加上下文。 我们可以通过在从一个意图转到另一个意图的同时添加参数,同时保持对话的上下文,来使我们的聊天机器人更加灵活。 在本教程的下一部分中,我们将看到如何将聊天机器人集成到网站中。
......
......@@ -30,7 +30,7 @@
我们人类不会从头开始学习新事物。 取而代之的是,无论是否有意识地,我们都充分利用所学到的知识。 人工智能中的迁移学习试图做同样的事情-这种技术通常只需要训练的大型模型中的一小块,然后将其重新用于相关任务的新模型中,而无需访问大型训练数据和计算资源来训练原始模型。 总体而言,迁移学习仍然是 AI 中的一个开放问题,因为在许多情况下,仅需人类反复尝试几个例子,然后再学习掌握新事物,就会花很多时间来训练和学习 AI。 但是,在图像识别领域,迁移学习已被证明是非常有效的。
用于图像识别的现代深度学习模型通常是深度神经网络,或更具体地说,是具有许多层的深度**卷积神经网络****CNN**)。 这种 CNN 的较低层负责学习和识别较低层的功能,例如图像的边缘,轮廓和零件,而最后一层则确定图像的类别。 对于不同类型的对象,例如犬种或花朵类型,我们不需要重新学习网络较低层的参数或权重。 实际上,从头开始需要花费数周的训练来学习用于图像识别的现代 CNN 的所有权重,通常是数百万甚至更多。 在图像分类的情况下,迁移学习使我们能够使用特定的图像集重新训练此类 CNN 的最后一层,通常不到一小时,而所有其他层都保持不变,并且达到了几乎相同的精度,就像我们从头开始训练整个网络数周一样。
用于图像识别的现代深度学习模型通常是深度神经网络,或更具体地说,是具有许多层的深度**卷积神经网络****CNN**)。 这种 CNN 的较低层负责学习和识别较低层的特征,例如图像的边缘,轮廓和零件,而最后一层则确定图像的类别。 对于不同类型的对象,例如犬种或花朵类型,我们不需要重新学习网络较低层的参数或权重。 实际上,从头开始需要花费数周的训练来学习用于图像识别的现代 CNN 的所有权重,通常是数百万甚至更多。 在图像分类的情况下,迁移学习使我们能够使用特定的图像集重新训练此类 CNN 的最后一层,通常不到一小时,而所有其他层都保持不变,并且达到了几乎相同的精度,就像我们从头开始训练整个网络数周一样。
迁移学习的第二个主要好处是,我们只需要少量的训练数据就可以重新训练 CNN 的最后一层。 如果必须从头开始训练深层 CNN 的数百万个参数,则需要大量的训练数据。 例如,对于我们的狗品种再训练,我们只需要为每个狗品种提供 100 幅以上的图像,即可建立一个比原始图像分类模型更好的狗品种分类模型。
......
......@@ -23,7 +23,7 @@
自从 2012 年神经网络取得突破以来,当名为 **AlexNet** 的深层 CNN 模型通过大大降低错误率赢得了年度 ImageNet 视觉识别挑战时,许多计算机视觉和自然语言处理领域的研究人员就开始利用深度学习模型的强大功能这一优势。 基于深度学习的现代对象检测全部基于 CNN,并建立在诸如 AlexNet,Google Inception 或其他流行的 VGG 网络等预训练的模型之上。 这些 CNN 通常已经训练了数百万个参数,并且可以将输入图像转换为一组功能,这些功能可以进一步用于诸如上一章中涉及的图像分类以及对象检测以及其他与计算机视觉相关的任务。
自从 2012 年神经网络取得突破以来,当名为 **AlexNet** 的深层 CNN 模型通过大大降低错误率赢得了年度 ImageNet 视觉识别挑战时,许多计算机视觉和自然语言处理领域的研究人员就开始利用深度学习模型的强大功能这一优势。 基于深度学习的现代对象检测全部基于 CNN,并建立在诸如 AlexNet,Google Inception 或其他流行的 VGG 网络等预训练的模型之上。 这些 CNN 通常已经训练了数百万个参数,并且可以将输入图像转换为一组特征,这些特征可以进一步用于诸如上一章中涉及的图像分类以及对象检测以及其他与计算机视觉相关的任务。
2014 年,提出了一种最新的对象检测器,该对象检测器使用称为 RCNN(具有 CNN 特征的区域)的标记对象检测数据集对 AlexNet 进行了训练,与传统的检测方法相比,它在准确性上有了很大的提高。 RCNN 结合了一种称为区域提议的技术,该技术可生成大约 2,000 个可能的区域候选者,并在每个这些区域上运行 CNN 以进行分类和边界框预测。 然后,将这些结果合并以生成检测结果。 RCNN 的训练过程非常复杂,耗时数天,推理速度也很慢,在 GPU 上的图像上花费了将近一分钟。
......@@ -551,7 +551,7 @@ cd <TENSORFLOW_ROOT>/models/research/object_detection/protos
图 3.7:`TFObjectDetection` API 项目文件
7. 继续在`ViewController.mm`中添加其余代码。 在`viewDidLoad`中,添加以编程方式创建新`UIImageView`的代码,以首先显示测试图像,并在选择了特定模型以在测试图像上运行之后显示检测到的结果,然后添加以下功能实现:
7. 继续在`ViewController.mm`中添加其余代码。 在`viewDidLoad`中,添加以编程方式创建新`UIImageView`的代码,以首先显示测试图像,并在选择了特定模型以在测试图像上运行之后显示检测到的结果,然后添加以下函数实现:
```py
NSString* FilePathForResourceName(NSString* name, NSString* extension)
......@@ -562,7 +562,7 @@ void DrawTopDetections(std::vector<Tensor>& outputs, int image_width, int image_
void RunInferenceOnImage(NSString *model)
```
下一步之后,我们将解释这些功能的实现,您可以在该书的源代码仓库的`ch3/ios`文件夹中获取所有源代码。
下一步之后,我们将解释这些函数的实现,您可以在该书的源代码仓库的`ch3/ios`文件夹中获取所有源代码。
8. 在 iOS 模拟器或设备中运行该应用。 首先,您会在屏幕上看到一张图片。 点按任意位置,您将看到一个对话框,要求您选择模型。 选择`SSD MobileNet`型号,在模拟器中花费大约一秒钟,在 iPhone 6 上花费五秒钟,以在图像上绘制检测结果。 Faster RCNN Inception V2 需要更长的时间(在模拟器中大约需要 5 秒,在 iPhone 6 上大约需要 20 秒); 该模型也比`SSD MobileNet`更精确,可以捕获`SSD MobileNet`模型遗漏的一个狗物体。 最后一个型号,更快的 RCNN Resnet 101,在 iOS 模拟器中花费了将近 20 秒,但由于其尺寸而在 iPhone 6 上崩溃。 图 3.8 总结了运行结果:
......@@ -570,13 +570,13 @@ void RunInferenceOnImage(NSString *model)
图 3.8:使用不同的模型运行应用并显示检测结果
返回步骤 7 中的功能,`FilePathForResourceName`函数是用于返回资源文件路径的帮助程序功能`mscoco_label_map.pbtxt`文件,该文件定义了要检测的 90 个对象类的 ID,内部名称和显示名称。 ,模型图文件和测试图像。 它的实现与我们在上一章的`HelloTensorFlow`应用中看到的实现相同。
返回步骤 7 中的函数,`FilePathForResourceName`函数是用于返回资源文件路径的助手函数`mscoco_label_map.pbtxt`文件,该文件定义了要检测的 90 个对象类的 ID,内部名称和显示名称。 ,模型图文件和测试图像。 它的实现与我们在上一章的`HelloTensorFlow`应用中看到的实现相同。
`LoadLablesFile``GetDisplayName`函数使用 Google Protobuf API 加载和解析`mscoco_label_map.pbtxt`文件,并返回显示名称以显示检测到的对象的 ID。
LoadGraph 尝试加载三个用户选择的模型文件之一,并返回加载状态。
这两个关键功能`RunInferenceOnImage``DrawTopDetections`。 正如我们在“设置 TensorFlow 对象检测 API”部分中所看到的那样,`summary_graph`工具显示了我们在应用中使用的三种预训练对象检测模型的以下信息(请注意`uint8`类型):
这两个关键函数`RunInferenceOnImage``DrawTopDetections`。 正如我们在“设置 TensorFlow 对象检测 API”部分中所看到的那样,`summary_graph`工具显示了我们在应用中使用的三种预训练对象检测模型的以下信息(请注意`uint8`类型):
```py
Found 1 possible inputs: (name=image_tensor, type=uint8(4), shape=[?,?,?,3])
......
......@@ -28,7 +28,7 @@
1990 年代出现了第一个实用的独立于说话者的大词汇量和连续语音识别系统。 在 2000 年代初期,领先的初创公司 Nuance 和 SpeechWorks 提供的语音识别引擎为许多第一代基于 Web 的语音服务提供了支持,例如 TellMe,Phone 的 AOL 和 BeVocal。 当时构建的语音识别系统主要基于传统的**隐马尔可夫模型****HMM**),并且需要手动编写语法和安静环境以帮助识别引擎更准确地工作。
现代语音识别引擎几乎可以理解嘈杂环境下人们的任何说话,并且基于端到端深度学习,尤其是另一种更适合自然语言处理的深度神经网络,称为**循环神经网络****RNN**)。 与传统的基于 HMM 的语音识别不同,传统的基于 HMM 的语音识别需要人的专业知识来构建和微调手工设计的功能以及声学和语言模型,而基于 RNN 的端到端语音识别系统则将音频输入直接转换为文本,而无需将音频输入转换为语音表示以进行进一步处理。
现代语音识别引擎几乎可以理解嘈杂环境下人们的任何说话,并且基于端到端深度学习,尤其是另一种更适合自然语言处理的深度神经网络,称为**循环神经网络****RNN**)。 与传统的基于 HMM 的语音识别不同,传统的基于 HMM 的语音识别需要人的专业知识来构建和微调手工设计的特征以及声学和语言模型,而基于 RNN 的端到端语音识别系统则将音频输入直接转换为文本,而无需将音频输入转换为语音表示以进行进一步处理。
RNN 允许我们处理输入和/或输出的序列,因为根据设计,网络可以存储输入序列中的先前项目或可以生成输出序列。 这使 RNN 更适用于语音识别(输入是用户说出的单词序列),图像标题(输出是由一系列单词组成的自然语言句子),文本生成和时间序列预测 。 如果您不熟悉 RNN,则一定要查看 Andrey Karpathy 的博客,[循环神经网络的不合理有效性](http://karpathy.github.io/2015/05/21/rnn-effectiveness)。 在本书的后面,我们还将介绍一些详细的 RNN 模型。
......
......@@ -157,7 +157,7 @@ def predict_input_fn():
还要注意,我们使用`tf.data.Dataset``make_one_shot_iterator`方法创建了一个迭代器,该迭代器从数据集中返回一个示例(在这种情况下,我们在数据集中只有一个示例),与模型在处理大型数据集时,在训练和评估过程中获取数据的方式相同–这就是为什么稍后在模型的图形中看到`OneShotIterator`操作的原因。
3. 在主函数中,调用估计器的`predict`方法,该方法将生成给定功能的预测,然后打印下一个预测:
3. 在主函数中,调用估计器的`predict`方法,该方法将生成给定特征的预测,然后打印下一个预测:
```py
predictions = estimator.predict(input_fn=predict_input_fn())
......
......@@ -617,7 +617,7 @@ void softmax(float vals[], int count) {
}
```
定义了其他一些辅助功能来测试游戏结束状态:
定义了其他一些辅助函数来测试游戏结束状态:
```py
bool aiWon(int bd[]) {
......@@ -1103,7 +1103,7 @@ public class MainActivity extends AppCompatActivity implements Runnable {
}
```
还有一些帮助程序,它们是 iOS 代码的直接端口,用于检查游戏状态:
还有一些助手,它们是 iOS 代码的直接端口,用于检查游戏状态:
```py
public boolean aiWon(int bd[]) {
......
......@@ -670,7 +670,7 @@ obs, reward, done, info = env.step(0)
环境决定何时将`done`返回`True`时会有一些延迟-尽管前两个步骤已经返回了大于 15 度的度数(当极点与垂直线成 15 度以上时,情节结束了) ,您仍然可以对环境执行 0 操作。 第三步将`done`返回为`True`,并且环境中的另一步骤(最后一步)将导致警告,因为环境已经完成了该情节。
对于 CartPole 环境,每个`step`调用返回的`reward`值始终为 1,信息始终为{}。 这就是关于 CartPole 模拟环境的全部知识。 现在我们了解了 CartPole 的工作原理,让我们看看可以在每种状态(观察)下制定什么样的策略,我们可以让该策略告诉我们要采取的操作(步骤),以便我们可以保持杆直立。换句话说,就是尽可能长的时间,这样我们才能最大化我们的回报。 请记住,强化学习中的一项策略只是一项功能,该功能以智能体所处的状态为输入,并输出智能体接下来应采取的行动,以实现值最大化或长期回报。
对于 CartPole 环境,每个`step`调用返回的`reward`值始终为 1,信息始终为{}。 这就是关于 CartPole 模拟环境的全部知识。 现在我们了解了 CartPole 的工作原理,让我们看看可以在每种状态(观察)下制定什么样的策略,我们可以让该策略告诉我们要采取的操作(步骤),以便我们可以保持杆直立。换句话说,就是尽可能长的时间,这样我们才能最大化我们的回报。 请记住,强化学习中的一项策略只是一个函数,该函数以智能体所处的状态为输入,并输出智能体接下来应采取的行动,以实现值最大化或长期回报。
......@@ -735,7 +735,7 @@ print(np.mean(total_rewards))
现在,每 1,000 集的平均奖励为 42,与 9.36 相比有很大提高。
现在让我们看看我们是否可以制定出更好,更复杂的策略。 回想一下,策略只是从状态到操作的映射或功能。 在过去的几年中,我们在神经网络的兴起中了解到的一件事是,如果不清楚如何定义复杂的功能(例如强化学习中的策略),请考虑一下神经网络,毕竟这是通用函数近似器 (有关详细信息,请参见[神经网络可以计算任何函数的可视化证明](http://neuralnetworksanddeeplearning.com/chap4.html),Michael Nelson)。
现在让我们看看我们是否可以制定出更好,更复杂的策略。 回想一下,策略只是从状态到操作的映射或函数。 在过去的几年中,我们在神经网络的兴起中了解到的一件事是,如果不清楚如何定义复杂的函数(例如强化学习中的策略),请考虑一下神经网络,毕竟这是通用函数近似器 (有关详细信息,请参见[神经网络可以计算任何函数的可视化证明](http://neuralnetworksanddeeplearning.com/chap4.html),Michael Nelson)。
在上一章中我们介绍了 AlphaGo 和 AlphaZero,Jim Fleming 撰写了一篇有趣的博客文章,标题为[“在 AlphaGo 之前的 TD-Gammon”](https://medium.com/jim-fleming/before-alphago-there-was-td-gammon-13deff866197),这是第一个强化学习应用,它使用神经网络作为评估函数来训练自己,以击败五子棋冠军。 博客条目和 Sutton 和 Barto 的《强化学习:入门》一书都对 TD-Gammon 进行了深入的描述。 如果您想了解有关使用神经网络作为强大的通用函数的更多信息,还可以使用 Google 搜索“时差学习和 TD-Gammon”的原始论文。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册