提交 96304fef 编写于 作者: W wizardforcel

2020-08-07 23:31:24

上级 438729a7
......@@ -134,7 +134,7 @@ IPython 提示
在谈论以交互方式运行 TensorFlow 会话时,最好使用`InteractiveSession`对象。
与普通的`tf.Session`类不同,`tf.InteractiveSession`类将自身安装为构造时的默认会话。 因此,当您尝试评估张量或运行操作时,将不需要传递`Session`对象来指示它所引用的会话。
与普通的`tf.Session`类不同,`tf.InteractiveSession`类将自身安装为构造时的默认会话。 因此,当您尝试求值张量或运行操作时,将不需要传递`Session`对象来指示它所引用的会话。
# 处理计算工作流程 -- TensorFlow 的数据流程图
......@@ -154,7 +154,7 @@ TensorFlow 的数据流图是模型计算如何工作的符号表示:
## 计算图构建
通常在库用户创建张量和模型将支持的操作时构建计算图,因此无需直接构建`Graph()`对象。 Python 张量构造函数,例如`tf.constant()`,会将必要的元素添加到默认图。 TensorFlow 操作也会发生同样的情况。
通常在库用户创建张量和模型将支持的操作时构建计算图,因此无需直接构建`Graph()`对象。 Python 张量构造,例如`tf.constant()`,会将必要的元素添加到默认图。 TensorFlow 操作也会发生同样的情况。
例如,`c = tf.matmul(a, b)`创建一个`MatMul`类型的操作,该操作将张量`a``b`作为输入并产生`c`作为输出。
......@@ -177,7 +177,7 @@ TensorFlow 还提供了一种馈送机制,可将张量直接修补到图中的
### 变量初始化
要初始化变量,只需使用张量作为参数调用`Variable`对象构造函数
要初始化变量,只需使用张量作为参数调用`Variable`对象构造
在此示例中,我们使用`1000`零数组初始化了一些变量:
......@@ -438,7 +438,7 @@ array([[ 2, 5, 3, -5],
## 序列
序列实用程序包括诸如`argmin``argmax`(显示维度的最小值和最大值),`listdiff`(显示列表之间交集的补码),`where`(显示真实值的索引)和`unique`(在列表上显示唯一值)之类的张量方法。
序列工具包括诸如`argmin``argmax`(显示维度的最小值和最大值),`listdiff`(显示列表之间交集的补码),`where`(显示真实值的索引)和`unique`(在列表上显示唯一值)之类的张量方法。
```py
In [1]: import tensorflow as tf
......@@ -586,7 +586,7 @@ array([[3, 2, 1],
可视化摘要信息是任何数据科学家工具箱的重要组成部分。
TensorBoard 是一个软件实用程序,它允许数据流图的图形表示和用于解释结果的仪表板,通常来自日志记录实用程序
TensorBoard 是一个软件工具,它允许数据流图的图形表示和用于解释结果的仪表板,通常来自日志记录工具
![Dataflow structure and results visualization - TensorBoard](img/00008.jpg)
......@@ -625,19 +625,19 @@ tf.train.SummaryWriter.__init__(logdir, graph_def=None)
该命令将在参数的路径中创建一个`SummaryWriter`和一个事件文件。
`SummaryWriter`的构造函数将在`logdir`中创建一个新的事件文件。 当您调用以下函数之一时,此事件文件将包含`Event`类型的协议缓冲区:`add_summary()``add_session_log()``add_event()``add_graph()`
`SummaryWriter`的构造将在`logdir`中创建一个新的事件文件。 当您调用以下函数之一时,此事件文件将包含`Event`类型的协议缓冲区:`add_summary()``add_session_log()``add_event()``add_graph()`
如果将`graph_def`协议缓冲区传递给构造函数,则会将其添加到事件文件中。 (这等效于稍后调用`add_graph()`)。
如果将`graph_def`协议缓冲区传递给构造,则会将其添加到事件文件中。 (这等效于稍后调用`add_graph()`)。
当您运行 TensorBoard 时,它将从文件中读取图定义并以图形方式显示它,以便您可以与其进行交互。
首先,创建您要从中收集摘要数据的 TensorFlow 图,并确定要使用摘要操作注释的节点。
首先,创建您要从中收集摘要数据的 TensorFlow 图,并确定要使用摘要操作标注的节点。
TensorFlow 中的操作在您运行它们或取决于它们的输出的操作之前不会做任何事情。 我们刚刚创建的摘要节点是图的外围:当前运行的所有操作都不依赖于它们。 因此,要生成摘要,我们需要运行所有这些摘要节点。 手动管理它们很繁琐,因此请使用`tf.merge_all_summaries`将它们组合为一个可生成所有摘要数据的操作。
然后,您可以运行合并的摘要操作,这将在给定步骤中生成一个包含所有摘要数据的序列化摘要`protobuf`对象。 最后,要将摘要数据写入磁盘,请将摘要`protobuf`传递给`tf.train.SummaryWriter`
`SummaryWriter`在其构造函数中带有`logdir`,此`logdir`非常重要,它是所有事件将被写出的目录。 同样,`SummaryWriter`可以选择在其构造函数中使用`GraphDef`。 如果收到一个,TensorBoard 还将可视化您的图。
`SummaryWriter`在其构造器中带有`logdir`,此`logdir`非常重要,它是所有事件将被写出的目录。 同样,`SummaryWriter`可以选择在其构造器中使用`GraphDef`。 如果收到一个,TensorBoard 还将可视化您的图。
现在,您已经修改了图并具有`SummaryWriter`,就可以开始运行网络了! 如果需要,您可以在每个步骤中运行合并的摘要操作,并记录大量的训练数据。 不过,这可能是您需要的更多数据。 相反,请考虑每 n 个步骤运行一次合并的摘要操作。
......@@ -667,7 +667,7 @@ TensorFlow 中的操作在您运行它们或取决于它们的输出的操作之
| ![Special Summary functions](img/00015.jpg) | 一个常数。 |
| ![Special Summary functions](img/00016.jpg) | 摘要节点。 |
| ![Special Summary functions](img/00017.jpg) | 显示操作之间的数据流的边。 |
| ![Special Summary functions](img/00018.jpg) | 显示操作之间的控制依赖的边。 |
| ![Special Summary functions](img/00018.jpg) | 显示操作之间的控制依赖的边。 |
| ![Special Summary functions](img/00019.jpg) | 显示输出操作节点可以改变输入张量的参考边。 |
### 与 TensorBoard 的 GUI 交互
......
......@@ -87,7 +87,7 @@ plt.plot (trX, .2 + 2 * trX)
梯度下降本身就是一种迭代方法,并且是机器学习领域中最常用的优化算法。 考虑到可以用它优化的参数组合的复杂性,它结合了简单的方法和良好的收敛速度。
2D 线性回归从具有随机定义的权重或线性系数乘数的函数开始。 定义第一个值后,第二步是以以下形式应用递归函数:
2D 线性回归从具有随机定义的权重或线性系数乘数的函数开始。 定义第一个值后,第二步是以以下形式应用迭代函数:
![Iterative methods - gradient descent](img/00046.jpg)
......@@ -625,7 +625,7 @@ print (b1temp)
# 总结
在本章中,我们使用 TensorFlow 的训练实用程序构建了第一个具有标准损失函数的完整模型。 我们还建立了一个多元模型来说明多个维度来计算回归。 除此之外,我们使用 TensorBoard 在训练阶段观察变量的行为。
在本章中,我们使用 TensorFlow 的训练工具构建了第一个具有标准损失函数的完整模型。 我们还建立了一个多元模型来说明多个维度来计算回归。 除此之外,我们使用 TensorBoard 在训练阶段观察变量的行为。
在下一章中,我们将开始使用非线性模型,通过它我们将更接近神经网络领域,这是 TensorFlow 的主要支持领域,其效用提供了巨大价值。
......@@ -16,7 +16,7 @@
![Problem description](img/00058.jpg)
在上图中,我们可以看到如何对旧问题和新问题进行分类。 第一个(线性回归)可以想象为值不断增长的连续体。
在上图中,我们可以看到如何对旧问题和新问题进行分类。 第一个(线性回归)可以想象为值不断增长的连续体。
另一个是基于`x`值的输出只能具有两个不同值的域。 在第二张图的特定情况下,我们可以看到对其中一个选项的特定偏向极端:在左侧,`y`值偏向 0,在右侧偏向 1。
......@@ -131,7 +131,7 @@
到目前为止,我们仅针对两个类的情况进行分类,或者以概率语言对事件发生概率`p`进行分类。
在要决定两个以上类别的情况下,有两种主要方法: 一对一,一对
在要决定两个以上类别的情况下,有两种主要方法: 一对一,一对剩余
* 第一种技术包括计算许多模型,这些模型代表每个类别相对于所有其他类别的概率。
* 第二个由一组概率组成,其中我们代表一个类别相对于所有其他类别的概率。
......@@ -474,7 +474,7 @@ with tf.Session() as sess:
### 图形表示
使用 TensorBoard 实用程序,我们将看到操作链。 请注意,在一半的操作图中,我们定义了主要的全局操作(“小数点”)以及应用于其余项的梯度操作,这是进行`loss`函数最小化所必需的。 这是接下来几章要讨论的主题。
使用 TensorBoard 工具,我们将看到操作链。 请注意,在一半的操作图中,我们定义了主要的全局操作(“小数点”)以及应用于其余项的梯度操作,这是进行`loss`函数最小化所必需的。 这是接下来几章要讨论的主题。
![Graphical representation](img/00076.jpg)
......@@ -486,9 +486,9 @@ with tf.Session() as sess:
在机器学习库领域中,有很多选择。 最知名的之一是`sklearn`,我们在第 2 章聚类中讨论过。
在 TensorFlow 发布之后的很早,一个新的贡献库就出现了,叫做`skflow`,其主要目的是模拟`sklearn`界面和工作流程,在这个 TensorFlow 会话环境中工作更简洁。
在 TensorFlow 发布之后的很早,一个新的贡献库就出现了,叫做`skflow`,其主要目的是模拟`sklearn`接口和工作流程,在这个 TensorFlow 会话环境中工作更简洁。
在下面的示例中,我们将使用`skflow`界面重复先前回归的分析。
在下面的示例中,我们将使用`skflow`接口重复先前回归的分析。
在示例中,我们还将看到 skflow 如何为回归模型自动生成详细且组织良好的图,只需将日志目录设置为参数即可。
......
......@@ -93,7 +93,7 @@
## 有用的库和方法
在本章中,我们将使用 TensorFlow 和实用程序库中的一些新实用程序,这些是最重要的实用程序
在本章中,我们将使用 TensorFlow 和工具库中的一些新工具,这些是最重要的工具
### TensorFlow 激活函数
......@@ -118,9 +118,9 @@ TensorFlow 损失优化方法如下所述:
* `tf.train.AdadeltaOptimizer(learning_rate, rho, epsilon, use_locking, name)`:这是改良的 AdaGrad,它将限制频繁参数的累积到最大窗口,因此它考虑了一定数量的步骤,而不是整个参数历史记录。
* `tf.train.AdamOptimizer tf.train.AdamOptimizer.__init__(learning_rate, beta1, beta2, epsilon, use_locking, name)`:此方法在计算梯度时会添加一个因子,该因子对应于过去梯度的平均值,等同于动量因子。 因此,来自自适应矩估计的亚当这个名字。
### Sklearn 预处理实用程序
### Sklearn 预处理工具
让我们看一下以下 Sklearn 预处理实用程序
让我们看一下以下 Sklearn 预处理工具
* `preprocessing.StandardScaler()`:数据集的正则化是许多机器学习估计器的普遍要求,因此,为了使收敛更加直接,数据集将必须更像是标准正态分布,即具有零均值和单位方差的高斯曲线。 在实践中,我们通常会忽略分布的形状,而只是通过删除每个特征的平均值来变换数据以使其居中,然后通过将非恒定特征除以它们的标准偏差来缩放它。 对于此任务,我们使用`StandardScaler`,它实现了前面提到的任务。 它还存储转换,以便能够将其重新应用于测试集。
* `StandardScaler``fit_transform()`:简单地将数据调整为所需格式。 `StandardScaler`对象将保存转换变量,因此您将能够取回非规格化数据。
......
......@@ -29,7 +29,7 @@
## 梯度爆炸和消失
循环神经网络的主要问题之一发生在反向传播阶段,鉴于其递归性质,误差反向传播所具有的步骤数与一个非常深的网络相对应。 梯度计算的这种级联可能在最后阶段导致非常不重要的值,或者相​​反,导致不断增加且不受限制的参数。 这些现象被称为消失和爆炸梯度。 这是创建 LSTM 架构的原因之一。
循环神经网络的主要问题之一发生在反向传播阶段,鉴于其循环性质,误差反向传播所具有的步骤数与一个非常深的网络相对应。 梯度计算的这种级联可能在最后阶段导致非常不重要的值,或者相​​反,导致不断增加且不受限制的参数。 这些现象被称为消失和爆炸梯度。 这是创建 LSTM 架构的原因之一。
## LSTM 神经网络
......@@ -107,7 +107,7 @@ LSTM 单元格的一般结构
### 类`tf.nn.rnn_cell.BasicLSTMCell`
此类基本的 LSTM 递归网络单元,具有遗忘偏差,并且没有其他相关类型(如窥孔)的奇特特性,即使在不应影响的阶段,它也可以使单元查看所得状态。
此类基本的 LSTM 循环网络单元,具有遗忘偏差,并且没有其他相关类型(如窥孔)的奇特特性,即使在不应影响的阶段,它也可以使单元查看所得状态。
以下是主要参数:
......@@ -123,7 +123,7 @@ LSTM 单元格的一般结构
MultiRNNCell(cells, state_is_tuple=False)
```
这是`multiRNNCell`的构造函数,此方法的主要参数是单元格,它将是我们要堆栈`RNNCells`的实例。
这是`multiRNNCell`的构造器,此方法的主要参数是单元格,它将是我们要堆叠`RNNCells`的实例。
![class MultiRNNCell(RNNCell)](img/00113.jpg)
......@@ -191,7 +191,7 @@ max 338.218126
在这里,我们将简要描述将尝试对电力消耗变化进行建模的架构:
最终的架构基本上由 10 个成员串联的 LSTM 多单元组成,该单元的末尾具有线性回归或变量,对于给定的历史记录,它将线性单元数组输出的结果转换为最终的实数。 值(在这种情况下,我们必须输入最后 5 个值才能预测下一个)。
最终的架构基本上由 10 个成员连接的 LSTM 多单元组成,该单元的末尾具有线性回归或变量,对于给定的历史记录,它将线性单元数组输出的结果转换为最终的实数。 值(在这种情况下,我们必须输入最后 5 个值才能预测下一个)。
```py
def lstm_model(time_steps, rnn_layers, dense_layers=None):
......@@ -263,7 +263,7 @@ MSE: 0.001139
## 结果描述
现在我们可以得到真实测试值和预测值的图形,在图形中我们可以看到平均误差表明我们的递归模型具有很好的预测能力:
现在我们可以得到真实测试值和预测值的图形,在图形中我们可以看到平均误差表明我们的循环模型具有很好的预测能力:
![Results description](img/00119.jpg)
......@@ -381,7 +381,7 @@ plt.legend(handles=[plot_predicted, plot_test])
### 注意
请注意,此示例归功于[《可视化和理解递归网络》](https://arxiv.org/abs/1506.02078)[标题为“循环神经网络的不合理有效性”的文章](http://karpathy.github.io/2015/05/21/rnn-effectiveness/),该文章提供了许多想法和概念。
请注意,此示例归功于[《可视化和理解循环网络》](https://arxiv.org/abs/1506.02078)[标题为“循环神经网络的不合理有效性”的文章](http://karpathy.github.io/2015/05/21/rnn-effectiveness/),该文章提供了许多想法和概念。
## 字符级别模型
......@@ -465,11 +465,11 @@ K:G
该对象的主要方法如下:
* `tf.train.Saver(args)`:这是构造函数。 这是主要参数的列表:
* `tf.train.Saver(args)`:这是构造。 这是主要参数的列表:
* `var_list`:这是一个列表,其中包含要保存的所有变量的列表。 例如,{`firstvar: var1``secondvar: var2`}。 如果不存在,请保存所有对象。
* `max_to_keep`:这表示要维护的最大检查点数。
* `write_version`:这是文件格式版本,实际上只有 1 个有效。
* `tf.train.Saver.save`:此方法运行由构造函数添加的用于保存变量的操作。 这需要当前会​​话,并且所有变量都已初始化。 主要参数如下:
* `tf.train.Saver.save`:此方法运行由构造添加的用于保存变量的操作。 这需要当前会​​话,并且所有变量都已初始化。 主要参数如下:
* `session`:这是保存变量的会话
* `save_path`:这是检查点文件名的路径
* `global_step`:这是唯一的步骤标识符
......
......@@ -114,7 +114,7 @@ InceptionV3 总体图
残差网络架构于 2015 年 12 月出现(与 InceptionV3 几乎同时出现),它带来了一个简单而新颖的想法:不仅使用每个构成层的输出,还将该层的输出与原始输入结合。
在下图中,我们观察到 ResNet 模块之一的简化​​视图。 它清楚地显示了卷积层栈末尾的求和运算,以及最终的 relu 运算:
在下图中,我们观察到 ResNet 模块之一的简化​​视图。 它清楚地显示了卷积层栈末尾的求和运算,以及最终的 relu 运算:
![Residual Networks (ResNet)](img/00132.jpg)
......@@ -124,7 +124,7 @@ ResNet 一般架构
## 其他深度神经网络架构
最近开发了很多神经网络架构。 实际上,这个领域是如此活跃,以至于我们每年或多或少都有新的杰出建筑外观。 最有前途的神经网络架构的列表是:
最近开发了很多神经网络架构。 实际上,这个领域是如此活跃,以至于我们每年或多或少都有新的杰出架构外观。 最有前途的神经网络架构的列表是:
* SqueezeNet:此架构旨在减少 Alexnet 的参数数量和复杂性,声称减少了 50 倍的参数数量
* 高效神经网络(Enet):旨在构建更简单,低延迟的浮点运算数量,具有实时结果的神经网络
......
# 十、库安装和其他提示
有多种安装 TensorFlow 的选项。 Google 已经为许多架构,操作系统和图形处理单元(GPU)准备了软件包。 尽管在 GPU 上机器学习任务的执行速度要快得多,但是两个安装选项都可用:
有多种安装 TensorFlow 的选项。 Google 已经为许多架构,操作系统和图形处理单元(GPU)准备了包。 尽管在 GPU 上机器学习任务的执行速度要快得多,但是两个安装选项都可用:
* CPU:它将在机器处理核心的所有处理单元中并行工作。
* GPU:此选项仅在使用多种架构之一的情况下才能使用,这些架构利用了非常强大的图形处理单元,即 NVIDIA 的 CUDA 架构。 还有许多其他架构/框架,例如 Vulkan,还没有达到成为标准的临界数量。
......@@ -13,7 +13,7 @@
# Linux 安装
首先,我们应该放弃免责声明。 您可能知道,Linux 领域中有很多替代品,它们具有自己的特定软件包管理。 因此,我们选择使用 Ubuntu 16.04 发行版。 毫无疑问,它是最广泛的 Linux 发行版,此外,Ubuntu 16.04 是 LTS 版本或长期支持。 这意味着该发行版将对桌面版本提供三年的支持,对服务器版本提供五年的支持。 这意味着我们将在本书中运行的基本软件在 2021 年之前将获得支持!
首先,我们应该放弃免责声明。 您可能知道,Linux 领域中有很多替代品,它们具有自己的特定包管理。 因此,我们选择使用 Ubuntu 16.04 发行版。 毫无疑问,它是最广泛的 Linux 发行版,此外,Ubuntu 16.04 是 LTS 版本或长期支持。 这意味着该发行版将对桌面版本提供三年的支持,对服务器版本提供五年的支持。 这意味着我们将在本书中运行的基本软件在 2021 年之前将获得支持!
### 注意
......@@ -38,7 +38,7 @@
## Ubuntu 准备(需要在任何方法之前应用)
在开发最近发布的 Ubuntu 16.04 时,我们将确保已更新到最新的软件包版本,并且安装了最小的 Python 环境。
在开发最近发布的 Ubuntu 16.04 时,我们将确保已更新到最新的包版本,并且安装了最小的 Python 环境。
让我们在命令行上执行以下指令:
......@@ -51,7 +51,7 @@ $ sudo apt-get install -y build-essential python-pip python-dev python-numpy swi
## PIP 安装方法
在本节中,我们将使用 PIP(PIP 安装软件包)软件包管理器来获取 TensorFlow 及其所有依赖项。
在本节中,我们将使用 PIP(PIP 安装包)包管理器来获取 TensorFlow 及其所有依赖项。
这是一种非常简单的方法,您只需要进行一些调整就可以正常运行 TensorFlow 安装。
......@@ -66,7 +66,7 @@ $ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu
```
然后,您将找到正在下载的不同从属软件包,如果未检测到问题,则会显示相应的消息:
然后,您将找到正在下载的不同从属包,如果未检测到问题,则会显示相应的消息:
![CPU version](img/00149.jpg)
......@@ -130,14 +130,14 @@ https://storage.googleapis.com/tensorflow/linux/[processor type]/tensorflow-[ver
```
2. 从安装程序安装`virtualenv` Ubuntu 软件包:
2. 从安装程序安装`virtualenv` Ubuntu 包:
```py
$ sudo apt-get install python-virtualenv
```
3. 安装`virtualenv`软件包:
3. 安装`virtualenv`包:
```py
virtualenv --system-site-packages ~/tensorflow
......@@ -151,14 +151,14 @@ https://storage.googleapis.com/tensorflow/linux/[processor type]/tensorflow-[ver
```
5. 然后通过 PIP 安装`tensorflow`软件包:
5. 然后通过 PIP 安装`tensorflow`包:
```py
pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.9.0-cp27-none-linux_x86_64.whl
```
您将能够安装在 PIP linux 安装方法中转录的所有替代官方`tensorflow`软件包。
您将能够安装在 PIP linux 安装方法中转录的所有替代官方`tensorflow`包。
### 环境测试
......@@ -194,7 +194,7 @@ $ source ~/tensorflow/bin/activate
这种 TensorFlow 安装方法使用一种称为容器的最新操作技术。
容器在某些方面与 Virtualenv 的工作相关,在 Docker 中,您将拥有一个新的虚拟环境。 主要区别在于此虚拟化工作的级别。 它在简化的程序包中包含应用和所有依赖项,并且这些封装的容器可以在公共层 Docker 引擎上同时运行,而 Docker 引擎又在主机操作系统上运行。
容器在某些方面与 Virtualenv 的工作相关,在 Docker 中,您将拥有一个新的虚拟环境。 主要区别在于此虚拟化工作的级别。 它在简化的包中包含应用和所有依赖项,并且这些封装的容器可以在公共层 Docker 引擎上同时运行,而 Docker 引擎又在主机操作系统上运行。
![Docker installation method](img/00150.jpg)
......@@ -202,7 +202,7 @@ Docker 主要架构([图片来源](https://www.docker.com/products/docker-engi
### 安装 Docker
首先,我们将通过`apt`软件包安装`docker`
首先,我们将通过`apt`包安装`docker`
```py
sudo apt-get install docker.io
......@@ -307,7 +307,7 @@ Bazel(`bazel.io`)是一个构建工具,基于 Google 七年来一直使用
#### 添加 Bazel 发行版 URI 作为包源
首先,我们将 Bazel 仓库添加到可用仓库列表中,并将其各自的密钥添加到 APT 工具的配置中,该工具管理对 Ubuntu 操作系统的依赖性
首先,我们将 Bazel 仓库添加到可用仓库列表中,并将其各自的密钥添加到 APT 工具的配置中,该工具管理 Ubuntu 操作系统的依赖项
```py
$ echo "deb http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
......@@ -321,7 +321,7 @@ $ curl https://storage.googleapis.com/bazel-apt/doc/apt-key.pub.gpg | sudo apt-k
#### 更新和安装 Bazel
一旦安装了所有软件包源,就可以通过`apt-get`安装 Bazel:
一旦安装了所有包源,就可以通过`apt-get`安装 Bazel:
```py
$ sudo apt-get update && sudo apt-get install bazel
......@@ -334,7 +334,7 @@ $ sudo apt-get update && sudo apt-get install bazel
### 安装 GPU 支持(可选)
本节将教我们如何在 Linux 设置中安装支持 GPU 所需的必需软件包。
本节将教我们如何在 Linux 设置中安装支持 GPU 所需的必需包。
实际上,获得 GPU 计算支持的唯一方法是通过 CUDA。
......@@ -345,7 +345,7 @@ lsmod | grep nouveau
```
如果没有输出,请参阅安装 CUDA 系统软件包。如果没有输出,请执行以下命令:
如果没有输出,请参阅安装 CUDA 系统包。如果没有输出,请执行以下命令:
```py
$ echo -e "blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf
......@@ -355,9 +355,9 @@ $ sudo reboot (a reboot will occur)
```
### 安装 CUDA 系统软件
### 安装 CUDA 系统包
第一步是从仓库中安装所需的软件包:
第一步是从仓库中安装所需的包:
```py
sudo apt-get install -y linux-source linux-headers-`uname -r`
......@@ -411,14 +411,14 @@ sudo ln -s /usr/lib/x86_64-linux-gnu/libcupti.so /usr/local/cuda/extras/CUPTI/li
TensorFlow 使用附加的 cuDNN 包来加速深度神经网络操作。
然后,我们将下载`cudnn`软件包:
然后,我们将下载`cudnn`包:
```py
$ wget http://developer.download.nvidia.com/compute/redist/cudnn/v5/cudnn-7.5-linux-x64-v5.0-ga.tgz
```
然后,我们需要解压缩软件包并链接它们:
然后,我们需要解压缩包并链接它们:
```py
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
......@@ -534,7 +534,7 @@ Docker 工具箱安装程序路径选择器
![Downloading the Docker toolbox installer](img/00160.jpg)
Docker 工具箱软件包选择屏幕
Docker 工具箱包选择屏幕
完成各种安装操作后,我们的 Docker 安装将准备就绪:
......@@ -588,7 +588,7 @@ run -it -p 8888:8888 gcr.io/tensorflow/tensorflow bash
## 安装 PIP
在此步骤中,我们将使用`easy_install`软件包管理器安装 PIP 软件包管理器,该软件包管理器包含在安装工具 Python 软件包中,并且默认情况下包含在操作系统中。
在此步骤中,我们将使用`easy_install`包管理器安装 PIP 包管理器,该包管理器包含在安装工具 Python 包中,并且默认情况下包含在操作系统中。
对于此安装,我们将在终端中执行以下操作:
......@@ -610,7 +610,7 @@ sudo easy_install --upgrade six
![Install pip](img/00164.jpg)
在安装`six`软件包之后,我们通过执行以下命令来继续安装`tensorflow`软件包:
在安装`six`包之后,我们通过执行以下命令来继续安装`tensorflow`包:
```py
sudo pip install -ignore-packages six https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.10.0-py2-none-any.whl
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册