提交 0d98d6e8 编写于 作者: W wizardforcel

2021-01-12 15:02:07

上级 739a4b8e
......@@ -167,7 +167,7 @@ Socratic 是一个导师应用,它允许用户拍摄数学问题,并给出
# 激活函数
神经网络中的每一层都接受称为**激活函数**的函数。 此功能的作用是将神经元内部包含的数据保持在正常范围内,否则该范围会变得太大或太小,并导致与计算机中大十进制系数或大数的处理有关的计算错误。 另外,激活函数使神经网络能够处理数据中模式的非线性。
神经网络中的每一层都接受称为**激活函数**的函数。 此函数的作用是将神经元内部包含的数据保持在正常范围内,否则该范围会变得太大或太小,并导致与计算机中大十进制系数或大数的处理有关的计算错误。 另外,激活函数使神经网络能够处理数据中模式的非线性。
# 一些常见的深度学习架构简介
......
......@@ -697,7 +697,7 @@ void activateSpeechRecognizer() {
}
```
在前面的代码片段中,我们在`_speechRecognition`内部初始化了`SpeechRecognition`的实例。 然后,我们通过调用`_speechRecognition.setAvailabilityHandler()`回调函数来设置`AvailabilityHandler`,该回调函数需要传回可以分配给`_isAvailable``boolean`结果。 接下来,我们设置`RecognitionStartedHandler`该功能在启动语音识别服务时执行,并将`_isListening`设置为`true`表示移动设备的麦克风当前处于活动状态并且正在监听。 然后,我们使用`setRecognitionResultHandler`设置`RecognitionResultHandler`,这将给我们返回生成的文本。 这存储在字符串转录中。 最后,我们设置`RecognitionCompleteHandler`,当麦克风停止收听时,将`_isListening`设置为`false`
在前面的代码片段中,我们在`_speechRecognition`内部初始化了`SpeechRecognition`的实例。 然后,我们通过调用`_speechRecognition.setAvailabilityHandler()`回调函数来设置`AvailabilityHandler`,该回调函数需要传回可以分配给`_isAvailable``boolean`结果。 接下来,我们设置`RecognitionStartedHandler`在启动语音识别服务时执行,并将`_isListening`设置为`true`表示移动设备的麦克风当前处于活动状态并且正在监听。 然后,我们使用`setRecognitionResultHandler`设置`RecognitionResultHandler`,这将给我们返回生成的文本。 这存储在字符串转录中。 最后,我们设置`RecognitionCompleteHandler`,当麦克风停止收听时,将`_isListening`设置为`false`
3. 公开内部的`initState()`函数调用`activateSpeechRecognizer()`来设置`_speechRecognition`实例,如下所示:
......
......@@ -306,7 +306,7 @@ history = model.fit(train_generator,
validation_data=val_generator)
```
该模型经过 10 个周期的训练,这意味着每个样本至少要在神经网络上抛出 10 次。 注意在此功能中使用了`train_generator``val_generator`。 即使有 12GB+ 的 RAM 和 TPU 加速可用,训练也需要花费相当长的时间(这在任何个人中端设备上都是过大的)。 您将能够观察到运行上述代码的单元下方的训练日志。
该模型经过 10 个周期的训练,这意味着每个样本至少要在神经网络上抛出 10 次。 注意在此函数中使用了`train_generator``val_generator`。 即使有 12GB+ 的 RAM 和 TPU 加速可用,训练也需要花费相当长的时间(这在任何个人中端设备上都是过大的)。 您将能够观察到运行上述代码的单元下方的训练日志。
17. 然后,我们可以保存模型,之后可以继续转换保存的模型文件,如下所示:
......
......@@ -301,7 +301,7 @@ abstract class BaseAuth {
}
```
顾名思义,这些方法将使用认证的四个主要功能
顾名思义,这些方法将使用认证的四个主要函数
* `signIn()`:使用电子邮件和密码登录已经存在的用户
* `signUp()`:使用电子邮件和密码为新用户创建帐户
......@@ -359,7 +359,7 @@ Future<String> signUp(String email, String password) async {
}
```
在先前定义的功能中,我们使用`_firebaseAuth.currentUser()`提取当前登录用户的信息。 此方法返回包装在`FirebaseUser`对象中的完整信息。 我们将其存储在`user`变量中。 最后,我们使用`user.uid`返回用户的`uid`
在先前定义的函数中,我们使用`_firebaseAuth.currentUser()`提取当前登录用户的信息。 此方法返回包装在`FirebaseUser`对象中的完整信息。 我们将其存储在`user`变量中。 最后,我们使用`user.uid`返回用户的`uid`
8. 接下来,我们执行`signOut()`
......@@ -637,7 +637,7 @@ print("Malicious request logs in dataset: {:0.2f}%".format(float(num_malicious)
![](img/0e532087-53b6-4379-aed5-615c4c52f772.png)
3. 我们在上一步中加载的数据目前尚无法使用,无法进行深度学习。 在此步骤中,我们将其分为功能列和标签列,如下所示:
3. 我们在上一步中加载的数据目前尚无法使用,无法进行深度学习。 在此步骤中,我们将其分为特征列和标签列,如下所示:
```py
X = dataset[:,0]
......
......@@ -382,7 +382,7 @@ cv2.destroyAllWindows()
这样,我们就可以检测到人脸了,因此让我们在视频供稿中对其进行标记!
7. 我们将简单地使用 OpenCV 的矩形绘制功能在屏幕上标记面孔:
7. 我们将简单地使用 OpenCV 的矩形绘制函数在屏幕上标记面孔:
```py
minNeighbors=5,
......
......@@ -37,7 +37,7 @@
![](img/4e61a5dd-03d4-4334-818d-570e37d0f3f9.png)
尽管我们在前面的定义列表中没有提到观察者,但必须有观察者或评估者才能产生奖励。 有时,观察者本身可能是一个复杂的软件,但是通常,这是一个简单的评估功能或指标。
尽管我们在前面的定义列表中没有提到观察者,但必须有观察者或评估者才能产生奖励。 有时,观察者本身可能是一个复杂的软件,但是通常,这是一个简单的评估函数或指标。
要获得关于强化学习的更详细的想法,您可以阅读[这个页面](https://en.wikipedia.org/wiki/Reinforcement_learning)上的 Wikipedia 文章。 有关正在使用的强化学习智能体的快速样本,[请阅读以下 DataCamp 文章](https://www.datacamp.com/community/tutorials/introduction-reinforcement-learning)
......@@ -167,12 +167,12 @@ Connect 4 的规则可能会有所不同,因此让我们为 AI 将学习的规
* `arena.py`:此文件创建并维护玩家之间进行的比赛的记录,并允许我们在轮到谁之间切换。
* `compat.py`:此文件是用于使程序与 Python 2 和 Python 3 兼容的便捷工具。如果您确定正在开发的版本并希望在其上运行,则可以跳过此文件。
* `generate.py`:此文件播放一些随机移动的游戏,再加上 MCTS 移动,以生成可用于训练目的的游戏日志。 该文件存储每个游戏的获胜者以及玩家做出的动作。
* `internal.py`:此文件创建棋盘的虚拟表示并定义与棋盘相关的功能,例如将棋子放置在棋盘上,寻找获胜者或只是创建新棋盘。
* `internal.py`:此文件创建棋盘的虚拟表示并定义与棋盘相关的函数,例如将棋子放置在棋盘上,寻找获胜者或只是创建新棋盘。
* `keras_model.py`:此文件定义充当智能体大脑的模型。 在本项目的后面,我们将更深入地讨论该文件。
* `mcts.py`:此文件提供 MCTS 类,该类实质上是蒙特卡罗树搜索的实现。
* `nn.py`:此文件提供 NN 类,它是神经网络的实现,以及与神经网络相关的功能,例如拟合,预测,保存等。
* `nn.py`:此文件提供 NN 类,它是神经网络的实现,以及与神经网络相关的函数,例如拟合,预测,保存等。
* `player.py`:此文件为两种类型的播放器提供了类-MCTS 播放器和人工播放器。 MCTS 玩家是我们将训练的智能体,以玩游戏。
* `state.py`:这是`internal.py`文件的包装,提供了用于访问电路板和与电路板相关的功能的类。
* `state.py`:这是`internal.py`文件的包装,提供了用于访问电路板和与电路板相关的函数的类。
* `trainer.py`:这使我们可以训练模型。 这与`nn.py`中提供的内容不同,因为它更专注于涵盖游戏的训练过程,而`nn.py`中的内容主要是围绕此功能的包装。
接下来,我们将继续探索这些文件中每个文件的一些重要部分,同时遵循我们先前为构建 AI 制定的步骤。
......@@ -236,14 +236,14 @@ LIST4 += [[(y, x), (y + 1, x), (y + 2, x), (y + 3, x)] for y in range(BOARD_SIZE
`LIST4`变量存储任何玩家赢得比赛时可以实现的可能组合。
我们不会在此文件中讨论整个代码。 但是,重要的是要了解以下功能及其作用:
我们不会在此文件中讨论整个代码。 但是,重要的是要了解以下函数及其作用:
* `get_start_board()`:此函数以 NumPy 数组的形式返回电路板的空白 2D 数组表示形式。
* `clone_board(board)`:此功能用于按板级克隆整个 NumPy 数组。
* `clone_board(board)`:此函数用于按板级克隆整个 NumPy 数组。
* `get_action(board)`:此函数返回播放器已修改的数组中的位置。
* `action_to_string(action)`:此功能将玩家执行的动作的内部数字表示形式转换为可以以易于理解的形式显示给用户的字符串。 例如`place_at(board, pos,`
* `action_to_string(action)`:此函数将玩家执行的动作的内部数字表示形式转换为可以以易于理解的形式显示给用户的字符串。 例如`place_at(board, pos,`
* `player)`:执行为任何给定玩家在板上放置一块棋子的动作。 它还会更新板。
* `def get_winner(board)`:此功能确定棋盘当前状态下的游戏是否有赢家。 如果是,则返回获胜玩家的标识符,该标识符将为 1 或 -1。
* `def get_winner(board)`:此函数确定棋盘当前状态下的游戏是否有赢家。 如果是,则返回获胜玩家的标识符,该标识符将为 1 或 -1。
* `def to_string(board)`:此函数将板的 NumPy 数组表示形式转换为字符串,该字符串为人类可读的格式。
接下来,我们将研究如何对 AI 进行编程,使其根据游戏规则进行并仅接受有效的动作。
......@@ -334,7 +334,7 @@ while True:
游戏的状态管理系统是整个程序中最重要的部分之一,因为它控制着所有的游戏玩法,并在 AI 的自学习过程中促进了游戏玩法。 这样可以确保向玩家展示棋盘,并在进行有效的移动。 它还存储了几个与状态有关的变量,这些变量对于游戏进行很有用。 让我们来看看:
1. 让我们讨论`util/state.py`文件中提供的`State`类中最重要的特性和功能
1. 让我们讨论`util/state.py`文件中提供的`State`类中最重要的特性和函数
```py
import .internal as util
......@@ -411,13 +411,13 @@ def _fight(self, state, p1, p2):
return state.getWinner()
```
功能负责切换棋盘上的玩家,直到找到赢家为止。
函数负责切换棋盘上的玩家,直到找到赢家为止。
现在,让我们看一下如何生成随机的游戏玩法以使智能体自学。
# 生成示例游戏
到目前为止,我们已经讨论了`util/gameplay.py`文件,以演示该文件中与移动规则相关的代码-特别是该文件的自播放功能。 现在,我们来看看这些自玩游戏如何在迭代中运行以生成完整的游戏玩法日志。 让我们开始吧:
到目前为止,我们已经讨论了`util/gameplay.py`文件,以演示该文件中与移动规则相关的代码-特别是该文件的自播放函数。 现在,我们来看看这些自玩游戏如何在迭代中运行以生成完整的游戏玩法日志。 让我们开始吧:
1. 请考虑此文件提供的`Generator`类的`generate()`方法的代码:
......@@ -460,7 +460,7 @@ usage: run.py generate [-h]
python run.py generate --model model.h5 --simulation 100 -n 5000 --file selfplay.txt --progress
```
现在,让我们看一下一旦生成自播放日志就可以训练模型的功能
现在,让我们看一下一旦生成自播放日志就可以训练模型的函数
# 系统训练
......@@ -500,11 +500,11 @@ python run.py train selfplay.txt model.h5 newmodel.h5 --epoch 3 --progress
# 实现蒙特卡罗树搜索
`util/mcts.py`文件中提供了完整的 MCTS 算法实现。 该文件提供了 MCTS 类,该类具有以下重要功能
`util/mcts.py`文件中提供了完整的 MCTS 算法实现。 该文件提供了 MCTS 类,该类具有以下重要函数
* `getMostVisitedAction`:此函数返回将状态传递给访问次数最多的操作。
* `getActionInfo`:执行任何操作后,此函数返回状态信息。
* `_simulation`:此功能执行单个游戏模拟,并返回有关在模拟过程中玩过的游戏的信息。
* `_simulation`:此函数执行单个游戏模拟,并返回有关在模拟过程中玩过的游戏的信息。
最后,我们需要创建一个神经网络实现。
......@@ -528,9 +528,9 @@ momentum: 0.9
默认情况下,模型具有五个残差卷积层块。 我们先前在`util/internal.py`文件中定义了`BOARD_SIZE_H``BOARD_SIZE_W``KEY_SIZE`常量:
* `save(self, filename)`:此功能将模型保存到提供的文件名中。
* `predict(self, x)`:提供了板状态以及已经进行的移动,此功能输出可以下一步进行的单个移动。
* `fit(self, x, policy, value, batch_size = 256, epochs = 1)`:此功能用于将新样本拟合到模型并更新权重。
* `save(self, filename)`:此函数将模型保存到提供的文件名中。
* `predict(self, x)`:提供了板状态以及已经进行的移动,此函数输出可以下一步进行的单个移动。
* `fit(self, x, policy, value, batch_size = 256, epochs = 1)`:此函数用于将新样本拟合到模型并更新权重。
除了上述脚本之外,我们还需要一些驱动脚本。 您可以在该项目的存储库中查找它们,以了解它们的用法。
......@@ -589,12 +589,12 @@ GCP 上托管的模型将放置在 EC2 VM 实例中,并将包装在基于 Flas
您可以在[这个页面](https://github.com/PacktPublishing/Mobile-Deep-Learning-Projects/tree/master/Chapter8/chess)上找到我们为该象棋引擎创建的文件。 在将这些文件与 Connect 4 项目中的文件映射之前,让我们快速了解一些最重要的文件:
* `src/chess_zero/agent/`
* `player_chess.py`:此文件描述`ChessPlayer`类,该类保存有关在任何时间点玩游戏的玩家的信息。 它为与使用蒙特卡洛树搜索来搜索新动作,更改玩家状态以及每个用户在玩游戏期间所需的其他功能相关的方法提供了包装。
* `player_chess.py`:此文件描述`ChessPlayer`类,该类保存有关在任何时间点玩游戏的玩家的信息。 它为与使用蒙特卡洛树搜索来搜索新动作,更改玩家状态以及每个用户在玩游戏期间所需的其他功能的相关方法提供了包装。
* `model_chess.py`:此文件描述了此系统中使用的剩余 CNN。
* `src/chess_zero/config/`
* `mini.py`:此文件定义国际象棋引擎学习或玩的配置。 您将需要在此处有时调整这些参数,以降低在低端计算机上进行训练期间的批量大小或虚拟 RAM 消耗。
* `src/chess_zero/env/`
* `chess_env.py`:此文件描述棋盘的设置,游戏规则以及执行游戏操作所需的功能。 它还包含检查游戏状态和验证移动的方法。
* `chess_env.py`:此文件描述棋盘的设置,游戏规则以及执行游戏操作所需的函数。 它还包含检查游戏状态和验证移动的方法。
* `src/chess_zero/worker/`
* `evaluate.py`:此文件负责与当前最佳模型和下一代模型玩游戏。 如果下一代模型的表现优于 100 款游戏,则它将替代以前的模型。
* `optimize.py`:此文件加载当前最佳模型,并在其上执行更多监督的基于学习的训练。
......@@ -609,7 +609,7 @@ GCP 上托管的模型将放置在 EC2 VM 实例中,并将包装在基于 Flas
还记得我们在讨论 Connect 4 AI 时制定的步骤吗? 让我们看看国际象棋项目是否也遵循相同的步骤:
1. 创建棋盘的虚拟代表。 这是在`src/chess_zero/env/chess_env.py`文件中完成的。
2. 创建允许根据游戏规则进行移动的功能。 这也可以在`src/chess_zero/env/chess_env.py`文件中完成。
2. 创建允许根据游戏规则进行移动的函数。 这也可以在`src/chess_zero/env/chess_env.py`文件中完成。
3. **原地的状态管理系统**:此功能在许多文件上维护,例如`src/chess_zero/agent/player_chess.py``src/chess_zero/env/chess_env.py`
4. **简化游戏**:这是通过`src/chess_zero/play_game/uci.py`文件完成的。
5. 创建一个可以生成示例游戏玩法的脚本,以供系统学习。 尽管此系统未将生成的游戏玩法明确地存储为磁盘上的文件,但该任务由`src/chess_zero/worker/self_play.py`执行。
......
......@@ -147,8 +147,8 @@ SRGAN 算法的功能描述如下:该算法从数据集中选取高分辨率
* `api/`
* `model /`
* `__init __.py`:此文件指示此文件的父文件夹可以像模块一样导入。
* `common.py`:包含任何 GAN 模型所需的常用功能
* `srgan.py`:其中包含开发 SRGAN 模型所需的功能
* `common.py`:包含任何 GAN 模型所需的常用函数
* `srgan.py`:其中包含开发 SRGAN 模型所需的函数
* `weights/`
* `gan_generator.h5`:模型的预训练权重文件。 随意使用它来快速运行并查看项目的工作方式。
* `data.py`:用于在 DIV2K 数据集中下载,提取和加载图像的工具函数。
......@@ -318,7 +318,7 @@ Widget buildPickImageButton() {
}
```
此函数返回以`FloatingActionButton`作为其子元素的`Container`。 按钮的`elevation`属性控制其下方阴影的大小,并设置为`8`。 为了反映该按钮用于选择图像,通过`Icon`类为它提供了摄像机的图标。 当前,我们已经将按钮的`onPressed`属性设置为空白。 我们将在下一部分中定义一个功能,使用户可以在按下按钮时从设备的图库中选择图像。
此函数返回以`FloatingActionButton`作为其子元素的`Container`。 按钮的`elevation`属性控制其下方阴影的大小,并设置为`8`。 为了反映该按钮用于选择图像,通过`Icon`类为它提供了摄像机的图标。 当前,我们已经将按钮的`onPressed`属性设置为空白。 我们将在下一部分中定义一个函数,使用户可以在按下按钮时从设备的图库中选择图像。
5. 最后,我们将覆盖`build`方法以返回应用的`Scaffold`
......@@ -389,7 +389,7 @@ void loadImage(File file) {
}
```
功能将用户选择的图像文件作为输入。 在函数内部,我们将先前声明的`img1`变量的值设置为`Image.file(file)`,这将返回从`'file'`构建的`Image`小部件。 回想一下,最初,`img1`被设置为占位符图像。 为了重新渲染屏幕并显示用户选择的图像,我们将`img1`的新分配放在`setState()`中。
函数将用户选择的图像文件作为输入。 在函数内部,我们将先前声明的`img1`变量的值设置为`Image.file(file)`,这将返回从`'file'`构建的`Image`小部件。 回想一下,最初,`img1`被设置为占位符图像。 为了重新渲染屏幕并显示用户选择的图像,我们将`img1`的新分配放在`setState()`中。
6. 现在,将`pickImage()`添加到`builtPickImageButton()`内的`FloatingActionButton``onPressed`属性中:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册