提交 603e9184 编写于 作者: W wizardforcel

2020-08-06 22:48:54

上级 27816f15
# 七、TensorFlow GPU 配置
要将 TensorFlow 与 NVIDIA GPU 配合使用,第一步是安装 CUDA Toolkit
要将 TensorFlow 与 NVIDIA GPU 配合使用,第一步是安装 CUDA 工具包
### 注意
要了解更多信息,请访问[此链接](https://developer.nvidia.com/cuda-downloads)
安装 CUDA Toolkit 后,必须从[此链接](https://developer.nvidia.com/cudnn)下载适用于 Linux 的 cuDNN v5.1 库。
安装 CUDA 工具包后,必须从[此链接](https://developer.nvidia.com/cudnn)下载适用于 Linux 的 cuDNN v5.1 库。
cuDNN 是一个有助于加速深度学习框架的库,例如 TensorFlow 和 Theano。以下是 NVIDIA 网站的简要说明:
> “NVIDIACUDA®深度神经网络库(cuDNN)是用于深度神经网络的 GPU 加速原语库.cuDNN 为标准例程提供高度调整的实现,例如前向和后向卷积,池化,正则化和激活层.cuDNN is NVIDIA 深度学习 SDK 的一部分。“
> NVIDIACUDA®深度神经网络库(cuDNN)是用于深度神经网络的 GPU 加速原语库.cuDNN 为标准例程提供高度调整的实现,例如前向和后向卷积,池化,正则化和激活层。cuDNN 是 NVIDIA 深度学习 SDK 的一部分。
在安装之前,您需要在 NVIDIA 的加速计算开发人员计划中注册。注册后,登录并将 cuDNN 5.1 下载到本地计算机。
下载完成后,解压缩文件并将其复制到 CUDA Toolkit 目录中(我们假设目录为`/usr/local/cuda/`):
下载完成后,解压缩文件并将其复制到 CUDA 工具包目录中(我们假设目录为`/usr/local/cuda/`):
```py
$ sudo tar -xvf cudnn-8.0-linux-x64-v5.1-rc.tgz -C /usr/local
......@@ -23,7 +23,7 @@ $ sudo tar -xvf cudnn-8.0-linux-x64-v5.1-rc.tgz -C /usr/local
## 更新 TensorFlow
我们假设您将使用 TensorFlow 来构建您的深度神经网络模型。只需通过 pip`upgrade`标志更新 TensorFlow。
我们假设您将使用 TensorFlow 来构建您的深度神经网络模型。只需通过 PIP`upgrade`标志更新 TensorFlow。
我们假设您当前正在使用 TensorFlow 0.11:
......@@ -83,7 +83,7 @@ A = np.random.rand(10000, 10000).astype('float32')
B = np.random.rand(10000, 10000).astype('float32')
```
`A``B`各自的大小为 10000x10000
`A``B`各自的大小为`10000x10000`
以下数组将用于存储结果:
......@@ -182,7 +182,7 @@ with tf.device('/gpu:1'):
c1.append(matpow(b, n))
```
这样,我们告诉 gpu1 执行内核函数。如果我们指定的设备不​​存在(如我的情况),您将获得`InvalidArgumentError`
这样,我们告诉`gpu1`执行内核函数。如果我们指定的设备不​​存在(如我的情况),您将获得`InvalidArgumentError`
```py
InvalidArgumentError (see above for traceback): Cannot assign a device to node 'Placeholder_1': Could not satisfy explicit device specification '/device:GPU:1' because no devices matching that specification are registered in this process; available devices: /job:localhost/replica:0/task:0/cpu:0
......@@ -190,7 +190,7 @@ InvalidArgumentError (see above for traceback): Cannot assign a device to node '
```
如果您希望 TensorFlow 自动选择现有且受支持的设备来运行操作(如果指定的设备不​​存在),则可以在创建会话时在配置选项中将`allow_soft_placement`设置为 True
如果您希望 TensorFlow 自动选择现有且受支持的设备来运行操作(如果指定的设备不​​存在),则可以在创建会话时在配置选项中将`allow_soft_placement`设置为`True`
我们再次为以下节点设置`'/gpu:1'`
......@@ -377,9 +377,9 @@ cluster = tf.train.ClusterSpec({"ps": ["localhost:2222"],\
"localhost:2224"]})
```
节点通常分为两个作业:主机变量的参数服务器(`ps`)和执行大量计算的工作器。在上面的代码中,我们有一个参数服务器和两个 worker,以及每个节点的 IP 地址和端口。
节点通常分为两个作业:主机变量的参数服务器(`ps`)和执行大量计算的工作器。在上面的代码中,我们有一个参数服务器和两个工作器,以及每个节点的 IP 地址和端口。
然后我们必须为之前定义的每个参数服务器和 worker 构建一个`tf.train.Server`
然后我们必须为之前定义的每个参数服务器和工作器构建一个`tf.train.Server`
```py
ps = tf.train.Server(cluster, job_name="ps", task_index=0)
......@@ -392,7 +392,7 @@ worker1 = tf.train.Server(cluster,\
`tf.train.Server`对象包含一组本地设备,一组与`tf.train.ClusterSpec`中其他任务的连接,以及一个可以使用它们执行分布式计算的`tf.Session`。创建它是为了允许设备之间的连接。
接下来,我们使用以下命令将模型变量分配给 worker
接下来,我们使用以下命令将模型变量分配给工作器
```py
tf.device :
......
......@@ -4,11 +4,11 @@ TFLearn 是一个库,它使用漂亮且熟悉的 scikit-learn API 包装了许
TensorFlow 是关于构建和执行图的全部内容。这是一个非常强大的概念,但从一开始就很麻烦。
在 TF.Learn 的引擎盖下,我们只使用了三个部分:
在 TFLearn 的引擎盖下,我们只使用了三个部分:
* 层:一组高级 TensorFlow 函数,允许我们轻松构建复杂的图,从完全连接的层,卷积和批量规范到损失和优化。
* graph_actions:一组工具,用于对 TensorFlow 图进行训练,评估和运行推理。
* Estimator:将所有内容打包成一个遵循 scikit-learn 接口的类,并提供了一种轻松构建和训练自定义 TensorFlow 模型的方法。
* `graph_actions`:一组工具,用于对 TensorFlow 图进行训练,评估和运行推理。
* 估计器:将所有内容打包成一个遵循 scikit-learn 接口的类,并提供了一种轻松构建和训练自定义 TensorFlow 模型的方法。
## 安装
......@@ -62,7 +62,7 @@ fare Passenger Fare
| 1 | 3 | Baclini, Miss. Marie Catherine | female | 5 | 2 | 1 | 2666 | 19.2583 |
| 0 | 3 | Youseff, Mr. Gerious | male | 45.5 | 0 | 0 | 2628 | 7.2250 |
我们的任务有两个类:没有幸存(`class = 0`)和幸存(`class = 1`)。乘客数据有 8 个特征。泰坦尼克号数据集存储在 CSV 文件中,因此我们可以使用`TFLearn load_csv()`函数将文件中的数据加载到 Python 列表中。我们指定`target_column`参数以指示我们的标签(幸存与否)位于第一列(id:0)。这些函数将返回一个元组:(数据,标签)。
我们的任务有两个类:没有幸存(`class = 0`)和幸存(`class = 1`)。乘客数据有 8 个特征。泰坦尼克号数据集存储在 CSV 文件中,因此我们可以使用`TFLearn load_csv()`函数将文件中的数据加载到 Python 列表中。我们指定`target_column`参数以指示我们的标签(幸存与否)位于第一列(ID:0)。这些函数将返回一个元组:(数据,标签)。
让我们从导入 NumPy 和 TFLearn 库开始:
......@@ -92,7 +92,7 @@ data, labels = load_csv('titanic_dataset.csv', target_column=0,
def preprocess(data, columns_to_ignore):
```
预处理阶段从降序 id 和删除列开始:
预处理阶段从降序 ID 和删除列开始:
```py
for id in sorted(columns_to_ignore, reverse=True):
......@@ -276,7 +276,7 @@ def multilayer_fully_connected(images, labels):
softmax_classifier(10, labels))
```
现在我们将构建一个多层卷积网络:该架构类似于 LeNet 5。请更改此设置,以便您可以尝试其他架构:
现在我们将构建一个多层卷积网络:该架构类似于 LeNet5。请更改此设置,以便您可以尝试其他架构:
```py
def lenet5(images, labels):
......@@ -297,7 +297,7 @@ def lenet5(images, labels):
```py
def make_choice():
var = int(input('(1) = multy layer model (2) = lenet 5 '))
var = int(input('(1) = multy layer model (2) = LeNet5 '))
print(var)
if var == 1:
result = multilayer_fully_connected\
......@@ -378,7 +378,7 @@ if __name__ == '__main__':
运行示例,我们必须选择要训练的模型:
```py
(1) = multylayer model (2) = lenet 5
(1) = multylayer model (2) = LeNet5
```
通过选择`multylayer model`,我们应该具有 95.5% 的准确率:
......@@ -454,8 +454,8 @@ Keras 是按照以下设计原则开发的:
Keras 既可以作为 TensorFlow API 在嵌入式版本中使用,也可以作为库使用:
* tf.keras 来自[此链接](https://www.tensorflow.org/api_docs/python/tf/keras)
* Keras v 2.1.4(更新和安装指南请参见[此链接](https://keras.io)
* `tf.keras`来自[此链接](https://www.tensorflow.org/api_docs/python/tf/keras)
* Keras v2.1.4(更新和安装指南请参见[此链接](https://keras.io)
在以下部分中,我们将了解如何使用第一个和第二个实现。
......@@ -468,7 +468,7 @@ Keras 的核心数据结构是一个模型,它是一种组织层的方法。
### 顺序模型
在本节中,我们将快速通过向您展示代码来解释顺序模型的工作原理。让我们首先使用 TensorFlow API 导入和构建 Keras `Sequential` 模型:
在本节中,我们将快速通过向您展示代码来解释顺序模型的工作原理。让我们首先使用 TensorFlow API 导入和构建 Keras `Sequential`模型:
```py
import tensorflow as tf
......@@ -531,7 +531,7 @@ proba = model.predict_proba(X_test, batch_size=32)
问题非常复杂,因为序列的长度可能不同,并且包含大量的输入符号词汇。该解决方案要求模型学习输入序列中符号之间的长期依赖关系。
IMDB 数据集包含 25,000 个极地电影评论(好的或坏的)用于训练,并且相同的数量再次用于测试。这些数据由斯坦福大学的研究人员收集,并用于 2011 年的一篇论文中,其中 50-50 分的数据被用于训练和测试。在本文中,实现了 88.89% 的准确率。
IMDB 数据集包含 25,000 个极地电影评论(好的或坏的)用于训练,并且相同的数量再次用于测试。这些数据由斯坦福大学的研究人员收集,并用于 2011 年的一篇论文中,其中五五开的数据被用于训练和测试。在本文中,实现了 88.89% 的准确率。
一旦我们定义了问题,我们就可以开发一个顺序 LSTM 模型来对电影评论的情感进行分类。我们可以快速开发用于 IMDB 问题的 LSTM 并获得良好的准确率。让我们首先导入此模型所需的类和函数,并将随机数生成器初始化为常量值,以确保我们可以轻松地重现结果。
......@@ -548,7 +548,7 @@ from tensorflow.python.keras.preprocessing import sequence
numpy.random.seed(7)
```
我们加载 IMDB 数据集。我们将数据集限制为前 5,000 个单词。我们还将数据集分为训练(50% )和测试(50% )集。
我们加载 IMDB 数据集。我们将数据集限制为前 5,000 个单词。我们还将数据集分为训练(50%)和测试(50%)集。
Keras 提供对 IMDB 数据集的内置访问。 `imdb.load_data()`函数允许您以准备好在神经网络和 DL 模型中使用的格式加载数据集。单词已被整数替换,这些整数表示数据集中每个单词的有序频率。因此,每个评论中的句子包括一系列整数。
......@@ -649,7 +649,7 @@ Accuracy: 86.79%
from keras.models import Model
```
首先要做的是指定模型的输入。让我们使用`Input()`函数声明一个 28×28×1 的张量:
首先要做的是指定模型的输入。让我们使用`Input()`函数声明一个`28×28×1`的张量:
```py
from keras.layers import Input
......@@ -675,7 +675,7 @@ vision_model = Model(digit_input, out)
#### SqueezeNet
在这个例子中,我们引入了一个名为 SqueezeNet 的小型 CNN 架构,它在 ImageNet 上实现了 AlexNet 级精度,参数减少了 50 倍。这个架构的灵感来自 GoogleNet 的初始模块,发表在论文中:SqueezeNet:AlexNet 级准确率,参数减少 50 倍,小于 1MB 模型[可从此链接下载](http://arxiv.org/pdf/1602.07360v2.pdf)
在这个例子中,我们引入了一个名为 SqueezeNet 的小型 CNN 架构,它在 ImageNet 上实现了 AlexNet 级精度,参数减少了 50 倍。这个架构的灵感来自 GoogleNet 的初始模块,发表在论文中:SqueezeNet:AlexNet 级准确率,参数减少 50 倍,模型小于 1MB[可从此链接下载](http://arxiv.org/pdf/1602.07360v2.pdf)
SqueezeNet 背后的想法是减少使用压缩方案处理的参数数量。此策略使用较少的过滤器减少参数数量。这是通过将挤压层送入它们所称的扩展层来完成的。这两层组成了所谓的 Fire Module,如下图所示:
......@@ -683,7 +683,7 @@ SqueezeNet 背后的想法是减少使用压缩方案处理的参数数量。此
图 2:SqueezeNet 消防模块
`fire_module` 1×1 卷积滤波器组成,然后是 ReLU 操作:
`fire_module``1×1`卷积滤波器组成,然后是 ReLU 操作:
```py
x = Convolution2D(squeeze,(1,1),padding='valid', name='fire2/squeeze1x1')(x)
......@@ -692,14 +692,14 @@ x = Activation('relu', name='fire2/relu_squeeze1x1')(x)
`expand`部分有两部分:`left``right`
`left`部分使用 1×1 卷积,称为扩展 1×1
`left`部分使用`1×1`卷积,称为扩展`1×1`
```py
left = Conv2D(expand, (1, 1), padding='valid', name=s_id + exp1x1)(x)
left = Activation('relu', name=s_id + relu + exp1x1)(left)
```
`right`部分使用 3×3 卷积,称为`expand3x3`。这两个部分后面都是 ReLU 层:
`right`部分使用`3×3`卷积,称为`expand3x3`。这两个部分后面都是 ReLU 层:
```py
right = Conv2D(expand, (3, 3), padding='same', name=s_id + exp3x3)(x)
......@@ -747,9 +747,9 @@ model = Model(inputs, x, name='squeezenet')
图 3:SqueezeNet 架构
您可以从下面的链接 SqueezeNet 的 Keras 执行 (在`squeezenet.py`文件):HTG3] https://github.com/rcmalli/keras-squeezenet [HTG4。
您可以从下面的链接执行 Keras 的 SqueezeNet(在[`squeezenet.py`文件](https://github.com/rcmalli/keras-squeezenet)):
然后我们在以下`squeeze_test.jpg`(227×227)图像上测试模型:
然后我们在以下`squeeze_test.jpg``227×227`)图像上测试模型:
![SqueezeNet](img/B09678_08_04.jpg)
......@@ -783,7 +783,7 @@ Predicted: [[('n02504013', 'Indian_elephant', 0.64139527), ('n02504458', 'Africa
# 总结
在本章中,我们研究了一些基于 TensorFlow 的 DL 研究和开发库。我们引入了 tf.estimator,它是 DL / ML 的简化接口,现在是 TensorFlow 和高级 ML API 的一部分,可以轻松训练,配置和评估各种 ML 模型。我们使用估计器函数为 Iris 数据集实现分类器。
在本章中,我们研究了一些基于 TensorFlow 的 DL 研究和开发库。我们引入了`tf.estimator`,它是 DL/ML 的简化接口,现在是 TensorFlow 和高级 ML API 的一部分,可以轻松训练,配置和评估各种 ML 模型。我们使用估计器函数为鸢尾花数据集实现分类器。
我们还看了一下 TFLearn 库,它包含了很多 TensorFlow API。在这个例子中,我们使用 TFLearn 来估计泰坦尼克号上乘客的生存机会。为了解决这个问题,我们构建了一个 DNN 分类器。
......
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册