提交 ba3529b2 编写于 作者: W wizardforcel

2020-12-06 12:33:33

上级 a63588b7
......@@ -297,7 +297,7 @@ make -f tensorflow/contrib/makefile/Makefile HOST_OS=PI TARGET=PI \
`tensorflow/contrib/pi_examples: label_image`和相机中有两个 TensorFlow Raspberry Pi 示例应用程序( [https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/pi_examples](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/pi_examples)。 我们将修改相机示例应用程序,以将文本集成到语音中,以便该应用程序在四处走动时可以说出其识别出的图像。 在构建和测试这两个应用程序之前,我们需要安装一些库并下载预构建的 TensorFlow Inception 模型文件:
`tensorflow/contrib/pi_examples: label_image`和相机中有两个 [TensorFlow Raspberry Pi 示例应用程序](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/pi_examples)。 我们将修改相机示例应用程序,以将文本集成到语音中,以便该应用程序在四处走动时可以说出其识别出的图像。 在构建和测试这两个应用程序之前,我们需要安装一些库并下载预构建的 TensorFlow Inception 模型文件:
```py
sudo apt-get install -y libjpeg-dev
......@@ -346,7 +346,7 @@ tensorflow/contrib/pi_examples/camera/gen/bin/camera
默认情况下,摄像机示例还使用`label_image/data`文件夹中解压缩的预构建 Inception 模型。 但是对于您自己的特定图像分类任务,您可以像通过[第 2 章](../Text/02.html)*使用*通过转移学习对图像进行分类一样,提供通过转移学习重新训练的模型。 ]参数在运行两个示例应用程序时。
通常,语音是 Raspberry Pi 机器人与我们互动的主要 UI。 理想情况下,我们应该运行 TensorFlow 支持的自然声音**文本到语音****TTS** )模型,例如 WaveNet( [https://deepmind.com/blog/ wavenet-generative-model-raw-audio](https://deepmind.com/blog/wavenet-generative-model-raw-audio) )或 Tacotron( [https://github.com/keithito/tacotron](https://github.com/keithito/tacotron) ),但运行和部署不在本章范围之内。 这样的模型。 事实证明,我们可以使用 CMU( [http://www.festvox.org/flite](http://www.festvox.org/flite) )称为 **Flite** 的简单得多的 TTS 库,它提供了相当不错的 TTS,并且 只需一个简单的命令即可安装它:`sudo apt-get install flite`。 如果要安装最新版本的 Flite 以期希望获得更好的 TTS 质量,只需从链接下载最新的 Flite 源并进行构建。
通常,语音是 Raspberry Pi 机器人与我们互动的主要 UI。 理想情况下,我们应该运行 TensorFlow 支持的自然声音**文本到语音****TTS** )模型,例如 [WaveNet](https://deepmind.com/blog/wavenet-generative-model-raw-audio)[Tacotron](https://github.com/keithito/tacotron),但运行和部署不在本章范围之内。 这样的模型。 事实证明,我们可以使用称为 [CMU **Flite**](http://www.festvox.org/flite) 的简单得多的 TTS 库,它提供了相当不错的 TTS,并且 只需一个简单的命令即可安装它:`sudo apt-get install flite`。 如果要安装最新版本的 Flite 以期希望获得更好的 TTS 质量,只需从链接下载最新的 Flite 源并进行构建。
要使用我们的 USB 扬声器测试 Flite,请使用`-t`参数运行 flite,然后使用双引号引起来的文本字符串,例如 `flite -t "i recommend the ATM machine"`。 如果您不喜欢默认语音,则可以通过运行 `flite -lv`找到其他受支持的语音,它们应返回 `Voices available: kal awb_time kal16 awb rms slt` 。 然后,您可以指定用于 TTS 的语音: `flite -voice rms -t "i recommend the ATM machine"`
......@@ -375,9 +375,9 @@ system(cmd.c_str());
要使用 TensorFlow 教程中的预训练音频识别模型( [https://www.tensorflow.org/tutorials/audio_recognition](https://www.tensorflow.org/tutorials/audio_recognition) )或我们之前描述的重新训练模型,我们将重用`listen.py` 来自 [https://gist.github.com/aallan](https://gist.github.com/aallan) 的 Python 脚本,并在识别四个基本音频命令后添加 GoPiGo API 调用以控制机器人的运动:“左”,“右”,“去” ,”和“停止”。 预训练模型支持的其他六个命令-“是”,“否”,“向上”,“向下”,“打开”和“关闭”,在我们的示例中不太适用,如果需要 ,您可以使用[第 5 章](../Text/05.html)*了解简单语音命令*中所示的重新训练模型,以支持针对特定任务的其他语音命令。
要使用 TensorFlow 教程中的[预训练音频识别模型](https://www.tensorflow.org/tutorials/audio_recognition)或我们之前描述的重新训练模型,我们将重用来自[这个页面](https://gist.github.com/aallan)的 Python 脚本`listen.py`,并在识别四个基本音频命令后添加 GoPiGo API 调用以控制机器人的运动:“左”,“右”,“去” ,”和“停止”。 预训练模型支持的其他六个命令-“是”,“否”,“向上”,“向下”,“打开”和“关闭”,在我们的示例中不太适用,如果需要 ,您可以使用[第 5 章](../Text/05.html)*了解简单语音命令*中所示的重新训练模型,以支持针对特定任务的其他语音命令。
要运行脚本,请先从 [http://download.tensorflow.org/models/speech_commands_v0.01.zip 下载预训练的音频识别模型,然后将其解压缩到`/tmp`,或者`scp`我们在](http://download.tensorflow.org/models/speech_commands_v0.01.zip)[第 5 章](../Text/05.html) , *中使用的模型了解简单语音命令* 和到 Pi 板的`/tmp`目录,然后运行
要运行脚本,请先从[这里](http://download.tensorflow.org/models/speech_commands_v0.01.zip)下载预训练的音频识别模型,然后将其解压缩到`/tmp`,或者对我们在[第 5 章](../Text/05.html)“了解简单语音命令”中使用的模型使用`scp`到 Pi 板的`/tmp`目录,然后运行
```py
python listen.py --graph /tmp/conv_actions_frozen.pb --labels /tmp/conv_actions_labels.txt -I plughw:1,0
......@@ -415,7 +415,7 @@ run(softmax_tensor, {
在这里,将`softmax_tensor`定义为 TensorFlow 图的`get_tensor_by_name(self.output_name_)`,将`output_name_``input_samples_name_``input_rate_name_`分别定义为`labels_softmax``decoded_sample_data:0``decoded_sample_data:1`,与 我们在[第 5 章](../Text/05.html)*了解简单语音命令*中的 iOS 和 Android 应用程序中使用过。
在之前的章节中,我们主要使用 Python 训练和测试 TensorFlow 模型,然后再使用本机 TensorFlow C ++库的 Java 接口代码在使用 C ++或 Android 的 iOS 中运行模型。 在 Raspberry Pi 上,您可以选择直接使用 TensorFlow Python API 或 C ++ API 在 Pi 上运行 TensorFlow 模型,尽管通常仍会在功能更强大的模型上进行训练 电脑。 有关完整的 TensorFlow Python API 文档,请参见 [https://www.tensorflow.org/api_docs/python](https://www.tensorflow.org/api_docs/python)
在之前的章节中,我们主要使用 Python 训练和测试 TensorFlow 模型,然后再使用本机 TensorFlow C ++库的 Java 接口代码在使用 C ++或 Android 的 iOS 中运行模型。 在 Raspberry Pi 上,您可以选择直接使用 TensorFlow Python API 或 C ++ API 在 Pi 上运行 TensorFlow 模型,尽管通常仍会在功能更强大的模型上进行训练 电脑。 有关完整的 TensorFlow Python API 文档,请参见[这里](https://www.tensorflow.org/api_docs/python)
要使用 GoPiGo Python API 使机器人根据您的语音命令移动,请首先在`listen.py`中添加以下两行:
......@@ -484,7 +484,7 @@ INFO:audio:stop
OpenAI Gym( [https://gym.openai.com](https://gym.openai.com) )是一个开源 Python 工具包,提供了许多模拟环境来帮助您开发,比较和训练强化学习算法,因此 您无需购买所有传感器并在实际环境中训练您的机器人,这在时间和金钱上都是昂贵的。 在本部分中,我们将向您展示如何在 TenAI 健身房的称为 CartPole( [https://gym.openai.com/envs/ CartPole-v0](https://gym.openai.com/envs/CartPole-v0)
[OpenAI Gym](https://gym.openai.com)是一个开源 Python 工具包,提供了许多模拟环境来帮助您开发,比较和训练强化学习算法,因此 您无需购买所有传感器并在实际环境中训练您的机器人,这在时间和金钱上都是昂贵的。 在本部分中,我们将向您展示如何在 TenAI 健身房的称为 [CartPole](https://gym.openai.com/envs/CartPole-v0)
要安装 OpenAI Gym,请运行以下命令:
......@@ -734,7 +734,7 @@ print(np.mean(total_rewards))
现在,每 1,000 集的平均奖励为 42,与 9.36 相比有很大提高。
现在让我们看看我们是否可以制定出更好,更复杂的政策。 回想一下,策略只是从状态到操作的映射或功能。 在过去的几年中,我们在神经网络的兴起中了解到的一件事是,如果不清楚如何定义复杂的功能(例如强化学习中的策略),请考虑一下神经网络,毕竟这是通用函数逼近器 (有关详细信息,请参见*的可视化证明,神经网络可以通过 *Michael Nelson* 在 [http://neuralnetworksanddeeplearning.com/chap4.html](http://neuralnetworksanddeeplearning.com/chap4.html) 说明)。*
现在让我们看看我们是否可以制定出更好,更复杂的政策。 回想一下,策略只是从状态到操作的映射或功能。 在过去的几年中,我们在神经网络的兴起中了解到的一件事是,如果不清楚如何定义复杂的功能(例如强化学习中的策略),请考虑一下神经网络,毕竟这是通用函数逼近器 (有关详细信息,请参见[神经网络可以计算任何函数的可视化证明](http://neuralnetworksanddeeplearning.com/chap4.html),Michael Nelson)。
We covered AlphaGo and AlphaZero in the last chapter, and Jim Fleming wrote an interesting blog entry titled Before AlphaGo there was TD-Gammon ([https://medium.com/jim-fleming/before-alphago-there-was-td-gammon-13deff866197](https://medium.com/jim-fleming/before-alphago-there-was-td-gammon-13deff866197)), which was the first reinforcement learning application that trains itself using a neural network as an evaluation function to beat human Backgammon champions. Both the blog entry and the book, *Reinforcement Learning: An Introduction* by *Sutton* and *Barto*, have in-depth descriptions of TD-Gammon; you can also Google "Temporal Difference Learning and TD-Gammon" for the original paper if you want to know more about using neural networks as a powerful universal function.
......@@ -850,7 +850,7 @@ with tf.Session() as sess:
* 测试运行当前策略,查看哪些操作导致较高的折扣奖励,然后使用折扣奖励更新当前策略的梯度(权重损失),以使具有较高折扣奖励的操作在网络更新后, 下次被选中的可能性更高。 重复这样的测试运行并多次更新该过程,以训练神经网络以获得更好的策略。
有关更详细的讨论和策略梯度的演练,请参阅 *Andrej Karpathy 的*博客条目, *深度强化学习:来自像素的傍*[http:// karpathy。 github.io/2016/05/31/rl](http://karpathy.github.io/2016/05/31/rl)。 现在,让我们看看如何为 TensorFlow 中的 CartPole 问题实现策略梯度。
有关更详细的讨论和策略梯度的演练,请参阅 Andrej Karpathy 的博客条目,[《深度强化学习:来自像素的乒乓》](http://karpathy.github.io/2016/05/31/rl)。 现在,让我们看看如何为 TensorFlow 中的 CartPole 问题实现策略梯度。
首先,导入 tensorflow,numpy 和 gym,并定义一个用于计算标准化和折价奖励的助手方法:
......@@ -889,7 +889,7 @@ cross_entropy = tf.nn.sigmoid_cross_entropy_with_logits(logits=logits, labels=pr
optimizer = tf.train.AdamOptimizer(learning_rate)
```
请注意,此处不再像以前的简单神经网络策略示例那样使用`minimize`函数,因为我们需要手动微调梯度以考虑每个动作的折价奖励。 这就要求我们首先使用`compute_gradients`方法,然后以所需的方式更新渐变,最后调用`apply_gradients`方法(我们大多数时候应该使用的`minimize`方法实际上是调用`compute_gradients``apply_gradients`在幕后-有关更多信息,请参见 [https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/training/optimizer.py](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/training/optimizer.py) )。
请注意,此处不再像以前的简单神经网络策略示例那样使用`minimize`函数,因为我们需要手动微调梯度以考虑每个动作的折价奖励。 这就要求我们首先使用`compute_gradients`方法,然后以所需的方式更新渐变,最后调用`apply_gradients`方法([我们大多数时候应该使用的`minimize`方法实际上是在幕后调用`compute_gradients`和`apply_gradients`](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/training/optimizer.py))。
因此,让我们现在为网络参数(权重和偏差)计算交叉熵损失的梯度,并设置梯度占位符,稍后将使用考虑了计算梯度和动作折现奖励的值来填充梯度占位符 在测试运行期间使用当前策略采取的措施:
......@@ -920,7 +920,7 @@ training_op = optimizer.apply_gradients(gvs_feed)
<tf.Variable 'dense_1/bias:0' shape=(1,) dtype=float32_ref>)]
```
请注意,kernel 只是权重的另一个名称,(4,4),(4,),(4,1)和(1,)是权重的形状和对第一个(输入到隐藏)和 第二层(隐藏到输出)。 如果您从 iPython 多次运行脚本,则`tf`对象的默认图形将包含先前运行的可训练变量,因此,除非调用`tf.reset_default_graph()`,否则需要使用`gvs = [(g, v) for g, v in gvs if g != None]`删除那些过时的训练变量, 将返回 None 渐变(有关`computer_gradients`的更多信息,请参见 [https://www.tensorflow.org/api_docs/python/tf/train/AdamOptimizer#compute_gradients](https://www.tensorflow.org/api_docs/python/tf/train/AdamOptimizer#compute_gradients) )。
请注意,kernel 只是权重的另一个名称,(4,4),(4,),(4,1)和(1,)是权重的形状和对第一个(输入到隐藏)和 第二层(隐藏到输出)。 如果您从 iPython 多次运行脚本,则`tf`对象的默认图形将包含先前运行的可训练变量,因此,除非调用`tf.reset_default_graph()`,否则需要使用`gvs = [(g, v) for g, v in gvs if g != None]`删除那些过时的训练变量, 将返回 None 渐变(有关`computer_gradients`的更多信息,请参见[这里](https://www.tensorflow.org/api_docs/python/tf/train/AdamOptimizer#compute_gradients))。
现在,玩一些游戏并保存奖励和渐变值:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册