Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
surelion
apachecn-dl-zh
提交
44354057
A
apachecn-dl-zh
项目概览
surelion
/
apachecn-dl-zh
与 Fork 源项目一致
Fork自
OpenDocCN / apachecn-dl-zh
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apachecn-dl-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
44354057
编写于
8月 07, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-08-07 18:36:35
上级
35fc6b1f
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
65 addition
and
65 deletion
+65
-65
docs/build-ml-proj-tf-zh/ch07.md
docs/build-ml-proj-tf-zh/ch07.md
+14
-14
docs/build-ml-proj-tf-zh/ch08.md
docs/build-ml-proj-tf-zh/ch08.md
+17
-17
docs/build-ml-proj-tf-zh/ch09.md
docs/build-ml-proj-tf-zh/ch09.md
+12
-12
docs/build-ml-proj-tf-zh/ch10.md
docs/build-ml-proj-tf-zh/ch10.md
+22
-22
未找到文件。
docs/build-ml-proj-tf-zh/ch07.md
浏览文件 @
44354057
...
...
@@ -37,11 +37,11 @@
## 门操作 -- 基本组件
为了更好地理解 lstm 单元内部的构造块,我们将描述 LSTM 的主要操作块:
gate
操作。
为了更好地理解 lstm 单元内部的构造块,我们将描述 LSTM 的主要操作块:
门
操作。
此操作基本上有一个多元输入,在此块中,我们决定让一些输入通过,将其他输入阻塞。 我们可以将其视为信息过滤器,并且主要有助于获取和记住所需的信息元素。
为了实现此操作,我们采用了一个多元控制向量(标有箭头),该向量与具有 S
型激活函数的神经网络层相连。 应用控制向量并通过 S 型
函数,我们将得到一个类似于二元的向量。
为了实现此操作,我们采用了一个多元控制向量(标有箭头),该向量与具有 S
igmoid 激活函数的神经网络层相连。 应用控制向量并通过 Sigmoid
函数,我们将得到一个类似于二元的向量。
我们将用许多开关符号来表示此操作:
...
...
@@ -53,13 +53,13 @@
LSTM 单元格的一般结构
在下面的图片中,我们代表了 LSTM
Cell
的一般结构。 它主要由上述三个门操作组成,以保护和控制单元状态。
在下面的图片中,我们代表了 LSTM
单元
的一般结构。 它主要由上述三个门操作组成,以保护和控制单元状态。
此操作将允许丢弃(希望不重要)低状态数据,并且将新数据(希望重要)合并到状态中。
![
The gate operation - a fundamental component
](
img/00109.jpg
)
上一个图试图显示一个 LSTM
Cell
的运行中发生的所有概念。
上一个图试图显示一个 LSTM
单元
的运行中发生的所有概念。
作为输入,我们有:
...
...
@@ -74,7 +74,7 @@ LSTM 单元格的一般结构
### 第 1 部分 -- 设置要忘记的值(输入门)
在本节中,我们将采用来自短期的值,再加上输入本身,并且这些值将由多元 S
型
表示的二元函数的值设置。 根据输入和短期记忆值,Sigmoid 输出将允许或限制一些先前的知识或单元状态中包含的权重。
在本节中,我们将采用来自短期的值,再加上输入本身,并且这些值将由多元 S
igmoid
表示的二元函数的值设置。 根据输入和短期记忆值,Sigmoid 输出将允许或限制一些先前的知识或单元状态中包含的权重。
![
Part 1 - set values to forget (input gate)
](
img/00110.jpg
)
...
...
@@ -99,7 +99,7 @@ LSTM 单元格的一般结构
通常,在本章中,假设 RNN 的领域更为广泛,我们将集中讨论 LSTM 类型的循环神经网络单元。 例如,还采用了 RNN 的其他变体,并为该领域增加了优势。
*
具有窥孔的 LSTM:在此网络中,单元门连接到单元状态
*
Gate Recurring Unit
:这是一个更简单的模型,它结合了忘记门和输入门,合并了单元的状态和隐藏状态,因此大大简化了网络的训练
*
门控循环单元
:这是一个更简单的模型,它结合了忘记门和输入门,合并了单元的状态和隐藏状态,因此大大简化了网络的训练
## TensorFlow LSTM 有用的类和方法
...
...
@@ -143,7 +143,7 @@ MultiRNNCell(cells, state_is_tuple=False)
这是原始数据集的描述:
> 数据集没有缺失值。 每 15 分钟以 kW 为单位的值。 要以 kWh 为单位转换值,必须将值除以 4。每一列代表一个客户端。 在 2011 年之后创建了一些客户。在这些情况下,消费被视为零。 所有时间标签均以葡萄牙语小时为单位。 但是,整天呈现 96 个小节(
24 * 15
)。 每年 3 月的时间更改日(只有 23 小时),所有时间点的凌晨 1:00 和 2:00 之间均为零。 每年 10 月的时间变更日(有 25 个小时),上午 1:00 和凌晨 2:00 之间的值合计消耗两个小时。
> 数据集没有缺失值。 每 15 分钟以 kW 为单位的值。 要以 kWh 为单位转换值,必须将值除以 4。每一列代表一个客户端。 在 2011 年之后创建了一些客户。在这些情况下,消费被视为零。 所有时间标签均以葡萄牙语小时为单位。 但是,整天呈现 96 个小节(
`24 * 15`
)。 每年 3 月的时间更改日(只有 23 小时),所有时间点的凌晨 1:00 和 2:00 之间均为零。 每年 10 月的时间变更日(有 25 个小时),上午 1:00 和凌晨 2:00 之间的值合计消耗两个小时。
为了简化我们的模型描述,我们仅对一位客户进行了完整的测量,并将其格式转换为标准 CSV。 它位于本章代码文件夹的数据子文件夹中
...
...
@@ -373,9 +373,9 @@ plt.legend(handles=[plot_predicted, plot_test])
```
# 示例 2 -- 编写音乐
“a la”
Bach
# 示例 2 -- 编写音乐
A La
Bach
在此示例中,我们将使用专门针对字符序列或
char
RNN 模型的循环神经网络。
在此示例中,我们将使用专门针对字符序列或
字符
RNN 模型的循环神经网络。
我们将使用一系列基于字符的格式表达的音乐,即巴赫·戈德堡变奏曲(Bach Goldberg Variations),馈入该神经网络,并根据所学的结构编写一首音乐样本。
...
...
@@ -385,7 +385,7 @@ plt.legend(handles=[plot_predicted, plot_test])
## 字符级别模型
如我们先前所见,
Char
RNN 模型可用于字符序列。 这类输入可以代表多种可能的语言。 以下是一些示例:
如我们先前所见,
字符
RNN 模型可用于字符序列。 这类输入可以代表多种可能的语言。 以下是一些示例:
*
程式码
*
不同的人类语言(某些作者的写作风格的建模)
...
...
@@ -412,7 +412,7 @@ RNN 的输入内容需要一种清晰直接的表示方式。 因此,选择单
ABC 格式页面主要包含两个组件:标头和注释。
*
`Header`
:标头包含一些键:值行,例如
`X:[Reference number]`
,
`T:[Title]`
,
`M:[Meter]`
,
`K:[Key]`
和
`C[Composer]`
。
*
注释:注释从
K
标题键之后开始,并列出每个小节的不同注释,以
`|`
字符分隔。
*
注释:注释从
`K`
标题键之后开始,并列出每个小节的不同注释,以
`|`
字符分隔。
还有其他元素,但是通过以下示例,即使没有音乐训练,您也将了解格式的工作原理:
...
...
@@ -469,7 +469,7 @@ K:G
*
`var_list`
:这是一个列表,其中包含要保存的所有变量的列表。 例如,{
`firstvar: var1`
,
`secondvar: var2`
}。 如果不存在,请保存所有对象。
*
`max_to_keep`
:这表示要维护的最大检查点数。
*
`write_version`
:这是文件格式版本,实际上只有 1 个有效。
*
`tf.train.Saver.save`
:此方法运行由构造函数添加的用于保存变量的
ops
。 这需要当前会话,并且所有变量都已初始化。 主要参数如下:
*
`tf.train.Saver.save`
:此方法运行由构造函数添加的用于保存变量的
操作
。 这需要当前会话,并且所有变量都已初始化。 主要参数如下:
*
`session`
:这是保存变量的会话
*
`save_path`
:这是检查点文件名的路径
*
`global_step`
:这是唯一的步骤标识符
...
...
@@ -478,7 +478,7 @@ K:G
*
`tf.train.Saver.restore`
:此方法恢复以前保存的变量。 主要参数如下:
*
`session`
:会话是要还原变量的位置
*
`save_path`
:这是先前由
save
方法,对
`last_checkpoint()`
的调用或提供的变量先前返回的变量
*
`save_path`
:这是先前由
`save`
方法,对
`last_checkpoint()`
的调用或提供的变量先前返回的变量
### 加载和保存的伪代码
...
...
@@ -585,7 +585,7 @@ python generate_dataset.py > input.txt
## 损失函数说明
损失函数由
losss_by_example
函数定义。 这是基于一种称为“困惑性”的度量,该度量可测量概率分布预测样本的程度。 此度量在语言模型中广泛使用:
损失函数由
`losss_by_example`
函数定义。 这是基于一种称为“困惑性”的度量,该度量可测量概率分布预测样本的程度。 此度量在语言模型中广泛使用:
```
py
self
.
logits
=
tf
.
matmul
(
output
,
softmax_w
)
+
softmax_b
...
...
docs/build-ml-proj-tf-zh/ch08.md
浏览文件 @
44354057
...
...
@@ -18,7 +18,7 @@
在 1980 年代和 1990 年代,神经网络领域一直保持沉默。 尽管付出了一些努力,但是架构非常简单,并且需要大的(通常是不可用的)机器力量来尝试更复杂的方法。
1998 年左右,在
Bells
实验室中,在围绕手写校验数字分类的研究中,Ian LeCun 开始了一种新趋势,该趋势实现了所谓的“深度学习——卷积神经网络”的基础,我们已经在第 5 章,简单的前馈神经网络中对其进行了研究。
1998 年左右,在
贝尔
实验室中,在围绕手写校验数字分类的研究中,Ian LeCun 开始了一种新趋势,该趋势实现了所谓的“深度学习——卷积神经网络”的基础,我们已经在第 5 章,简单的前馈神经网络中对其进行了研究。
在那些年里,SVM 和其他更严格定义的技术被用来解决这类问题,但是有关 CNN 的基础论文表明,与当时的现有方法相比,神经网络的表现可以与之媲美或更好。
...
...
@@ -38,9 +38,9 @@ Alexnet 架构
图像分类挑战的其他主要竞争者之一是牛津大学的 VGG。
VGG 网络架构的主要特征是它们将卷积滤波器的大小减小到一个简单的
3x3
,并按顺序组合它们。
VGG 网络架构的主要特征是它们将卷积滤波器的大小减小到一个简单的
`3x3`
,并按顺序组合它们。
微小的卷积内核的想法破坏了 LeNet 及其后继者 Alexnet 的最初想法,后者最初使用的过滤器高达
11x11
过滤器,但复杂得多且表现低下。 过滤器大小的这种变化是当前趋势的开始:
微小的卷积内核的想法破坏了 LeNet 及其后继者 Alexnet 的最初想法,后者最初使用的过滤器高达
`11x11`
过滤器,但复杂得多且表现低下。 过滤器大小的这种变化是当前趋势的开始:
![
Main features
](
img/00126.jpg
)
...
...
@@ -54,15 +54,15 @@ VGG 中每层的参数编号摘要
这些迭代的第一个迭代是从其自己的基于卷积神经网络层的架构版本(称为 GoogLeNet)开始的,该架构的名称让人想起了始于网络的方法。
## GoogLenet(Inception
V1)
## GoogLenet(InceptionV1)
![
GoogLenet (Inception
V1)
](
img/00127.jpg
)
![
GoogLenet (InceptionV1)
](
img/00127.jpg
)
1 启动模块
InceptionV1
GoogLeNet 是这项工作的第一个迭代,如下图所示,它具有非常深的架构,但是它具有九个链式初始模块的令人毛骨悚然的总和,几乎没有或根本没有修改:
![
GoogLenet (Inception
V1)
](
img/00128.jpg
)
![
GoogLenet (InceptionV1)
](
img/00128.jpg
)
盗梦空间原始架构
...
...
@@ -86,33 +86,33 @@ GoogLeNet 是这项工作的第一个迭代,如下图所示,它具有非常
再次简化了过程描述,它不仅包括对原始输入值进行归一化,还对每一层上的输出值进行了归一化,避免了在层之间出现不稳定性之前就开始影响或漂移这些值。
这是 Google 在 2015 年 2 月发布的改进版 GoogLeNet 实现中提供的主要功能,也称为 Inception
V2。
这是 Google 在 2015 年 2 月发布的改进版 GoogLeNet 实现中提供的主要功能,也称为 InceptionV2。
# Inception
v
3
# Inception
V
3
快进到 2015 年 12 月,Inception 架构有了新的迭代。 两次发行之间月份的不同使我们对新迭代的开发速度有了一个想法。
此架构的基本修改如下:
*
将卷积数减少到最大
3x3
*
将卷积数减少到最大
`3x3`
*
增加网络的总体深度
*
在每一层使用宽度增加技术来改善特征组合
下图说明了如何解释改进的启动模块:
![
Inception
v
3
](
img/00130.jpg
)
![
Inception
V
3
](
img/00130.jpg
)
Inception
V3 基本模块
InceptionV3 基本模块
这是整个 V3 架构的表示形式,其中包含通用构建模块的许多实例:
![
Inception
v
3
](
img/00131.jpg
)
![
Inception
V
3
](
img/00131.jpg
)
Inception
V3 总体图
InceptionV3 总体图
# 残差网络(ResNet)
残差网络架构于 2015 年 12 月出现(与 Inception
V3 几乎同时出现),它带来了一个简单而新颖的想法:不仅使用每个构成层的输出,还将该层的输出与原始输入结合。
残差网络架构于 2015 年 12 月出现(与 InceptionV3 几乎同时出现),它带来了一个简单而新颖的想法:不仅使用每个构成层的输出,还将该层的输出与原始输入结合。
在下图中,我们观察到 ResNet 模块之一的简化视图。 它清楚地显示了卷积层堆栈末尾的求和运算,以及最终的 relu 运算:
...
...
@@ -120,7 +120,7 @@ Inception V3 总体图
ResNet 一般架构
模块的卷积部分包括将特征从 256 个值减少到 64 个值,一个保留特征数的
3x3 过滤层以及一个从 64 x 256 个值增加 1x1
层的特征。 在最近的发展中,ResNet 的使用深度还不到 30 层,分布广泛。
模块的卷积部分包括将特征从 256 个值减少到 64 个值,一个保留特征数的
`3x3`
过滤层以及一个从 64 x 256 个值增加
`1x1`
层的特征。 在最近的发展中,ResNet 的使用深度还不到 30 层,分布广泛。
## 其他深度神经网络架构
...
...
@@ -147,7 +147,7 @@ ResNet 一般架构
## 有用的库和方法
*
使用
`scipy.io.loadmat`
加载参数文件
*
我们将使用的第一个有用的库是
scipy io 模块,用于加载系数数据,该数据另存为 matlab mat
格式。
*
我们将使用的第一个有用的库是
`scipy.io`
模块,用于加载系数数据,该数据另存为 matlab 的 MAT
格式。
*
上一个参数的用法:
```
py
...
...
docs/build-ml-proj-tf-zh/ch09.md
浏览文件 @
44354057
...
...
@@ -107,7 +107,7 @@ Pi 的面积比例
另一个事实是,我们可以为计算生成的随机样本越多,答案就越近似。 这是在增加 GPU 数量时会给我们带来更多样本和准确率。
我们做的进一步减少是我们生成
(X,Y)坐标,范围从(0..1)
,因此随机数生成更直接。 因此,我们需要确定样本是否属于圆的唯一标准是
`distance = d < 1.0`
(圆的半径)。
我们做的进一步减少是我们生成
`(X, Y)`
坐标,范围是
`(0..1)`
,因此随机数生成更直接。 因此,我们需要确定样本是否属于圆的唯一标准是
`distance = d < 1.0`
(圆的半径)。
## 解决方案实现
...
...
@@ -188,20 +188,20 @@ for d in ['/gpu:0', '/gpu:1', '/gpu:2', '/gpu:3']:
TensorFlow 集群设置元素
该图包含由
`ps`
和
worker 作业代表的两个作业,以及可以从客户端为其创建的 grpc 通讯通道(在附录 A-
库安装和附加提示中介绍)。 对于每种作业类型,都有服务器执行不同的任务,从而解决了作业域问题的子集。
该图包含由
`ps`
和
`worker`
作业代表的两个作业,以及可以从客户端为其创建的 grpc 通讯通道(在附录 A
库安装和附加提示中介绍)。 对于每种作业类型,都有服务器执行不同的任务,从而解决了作业域问题的子集。
### 创建一个 TensorFlow 集群
分布式集群程序的第一个任务是定义和创建一个
ClusterSpec
对象,该对象包含真实服务器实例的地址和端口,它们将成为集群的一部分。
分布式集群程序的第一个任务是定义和创建一个
`ClusterSpec`
对象,该对象包含真实服务器实例的地址和端口,它们将成为集群的一部分。
定义此
ClusterSpec
的两种主要方法是:
定义此
`ClusterSpec`
的两种主要方法是:
*
创建一个
`tf.train.ClusterSpec`
对象,该对象指定所有群集任务
*
在创建
`tf.train.Server`
时,传递上述
ClusterSpec
对象,并将本地任务与作业名称和任务索引相关联
*
在创建
`tf.train.Server`
时,传递上述
`ClusterSpec`
对象,并将本地任务与作业名称和任务索引相关联
####
ClusterSpec
定义格式
####
`ClusterSpec`
定义格式
ClusterSpec
对象是使用协议缓冲区格式定义的,该格式是基于 JSON 的特殊格式。
`ClusterSpec`
对象是使用协议缓冲区格式定义的,该格式是基于 JSON 的特殊格式。
格式如下:
...
...
@@ -238,7 +238,7 @@ tf.train.ClusterSpec({
#### 创建`tf.Train.Server`
创建
ClusterSpec
之后,我们现在可以在运行时准确了解集群配置。 我们将继续创建本地服务器实例,并创建一个
`tf.train.Server`
实例:
创建
`ClusterSpec`
之后,我们现在可以在运行时准确了解集群配置。 我们将继续创建本地服务器实例,并创建一个
`tf.train.Server`
实例:
这是一个示例服务器创建,它使用集群对象,作业名称和任务索引作为参数:
...
...
@@ -255,7 +255,7 @@ server = tf.train.Server(cluster, job_name="local", task_index=[Number of server
![
Cluster operation - sending computing methods to tasks
](
img/00144.jpg
)
上下文管理器中资源的常规调用是
with
关键字,具有以下结构。
上下文管理器中资源的常规调用是
`with`
关键字,具有以下结构。
```
py
with
tf
.
device
(
"/job:ps/task:1"
):
...
...
@@ -263,7 +263,7 @@ with tf.device("/job:ps/task:1"):
```
with
关键字指示在需要任务标识符时,将使用上下文管理器指令中指定的任务标识符。
`with`
关键字指示在需要任务标识符时,将使用上下文管理器指令中指定的任务标识符。
下图说明了一个示例集群设置,其中包含设置的所有不同部分的地址名称:
...
...
@@ -307,7 +307,7 @@ with tf.Session("grpc://worker1.cluster:2222") as sess:
## 服务器脚本
该脚本将在每个计算节点上执行,这将生成一批样本,并通过可用服务器的数量增加生成的随机数的数量。 在这种情况下,我们将使用两台服务器,并假设我们在本地主机中启动它们,并在命令行中指示索引号。 如果要在单独的节点中运行它们,则只需替换
ClusterSpec
定义中的本地主机地址(如果希望它更具代表性,则可以替换名称)。
该脚本将在每个计算节点上执行,这将生成一批样本,并通过可用服务器的数量增加生成的随机数的数量。 在这种情况下,我们将使用两台服务器,并假设我们在本地主机中启动它们,并在命令行中指示索引号。 如果要在单独的节点中运行它们,则只需替换
`ClusterSpec`
定义中的本地主机地址(如果希望它更具代表性,则可以替换名称)。
该脚本的源代码如下:
...
...
@@ -322,7 +322,7 @@ server.join()
```
在
localhost
中执行此脚本的命令行如下:
在
`localhost`
中执行此脚本的命令行如下:
```
py
python
start_server
.
py
-
index
=
0
#Server task 0
...
...
docs/build-ml-proj-tf-zh/ch10.md
浏览文件 @
44354057
...
...
@@ -34,7 +34,7 @@
### 提示
在 AWS 上,非常适合的 AMI 映像是代码
ami-cf68e0d8
。 它可以在 CPU 上运行良好,如果需要,也可以在 GPU 图像上运行。
在 AWS 上,非常适合的 AMI 映像是代码
`ami-cf68e0d8`
。 它可以在 CPU 上运行良好,如果需要,也可以在 GPU 图像上运行。
## Ubuntu 准备任务(需要在任何方法之前应用)
...
...
@@ -49,9 +49,9 @@ $ sudo apt-get install -y build-essential python-pip python-dev python-numpy swi
```
## P
ip
Linux 安装方法
## P
IP
Linux 安装方法
在本节中,我们将使用
pip(pip
安装软件包)软件包管理器来获取 TensorFlow 及其所有依赖项。
在本节中,我们将使用
PIP(PIP
安装软件包)软件包管理器来获取 TensorFlow 及其所有依赖项。
这是一种非常简单的方法,您只需要进行一些调整就可以正常运行 TensorFlow 安装。
...
...
@@ -113,11 +113,11 @@ https://storage.googleapis.com/tensorflow/linux/[processor type]/tensorflow-[ver
## Virtualenv 安装方法
在本节中,我们将使用
v
irtualenv 工具说明 TensorFlow 的首选方法。
在本节中,我们将使用
V
irtualenv 工具说明 TensorFlow 的首选方法。
从 v
irtualenv 页面(
`virtualenv.pypa.io`
):
来自 V
irtualenv 页面(
`virtualenv.pypa.io`
):
>
“ Virtualenv 是用于创建隔离的 Python 环境的工具。(...)它创建具有自己的安装目录的环境,该环境不与其他 virtualenv 环境共享库(并且可以选择不访问全局安装的库) “
。
>
Virtualenv 是用于创建隔离的 Python 环境的工具。(...)它创建具有自己的安装目录的环境,该环境不与其他 Virtualenv 环境共享库(并且可以选择不访问全局安装的库)
。
通过此工具,我们将为 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 安装方法使用一种称为容器的最新操作技术。
容器在某些方面与
v
irtualenv 的工作相关,在 Docker 中,您将拥有一个新的虚拟环境。 主要区别在于此虚拟化工作的级别。 它在简化的程序包中包含应用和所有依赖项,并且这些封装的容器可以在公共层 Docker 引擎上同时运行,而 Docker 引擎又在主机操作系统上运行。
容器在某些方面与
V
irtualenv 的工作相关,在 Docker 中,您将拥有一个新的虚拟环境。 主要区别在于此虚拟化工作的级别。 它在简化的程序包中包含应用和所有依赖项,并且这些封装的容器可以在公共层 Docker 引擎上同时运行,而 Docker 引擎又在主机操作系统上运行。
![
Docker installation method
](
img/00150.jpg
)
...
...
@@ -239,7 +239,7 @@ sudo usermod -aG docker [your user]
### 测试 Docker 安装
重新启动后,您可以尝试使用命令行调用
hello w
orld Docker 示例:
重新启动后,您可以尝试使用命令行调用
HelloW
orld Docker 示例:
```
py
$
docker
run
hello
-
world
...
...
@@ -248,7 +248,7 @@ $ docker run hello-world
![
Testing the Docker installation
](
img/00151.jpg
)
Docker Hello
World 容器
Docker HelloWorld 容器
### 运行 TensorFlow 容器
...
...
@@ -263,7 +263,7 @@ docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow
通过 PIP 安装 TensorFlow
安装完成后,您将看到最终的安装步骤,并且 Jupyter
Notebook
开始:
安装完成后,您将看到最终的安装步骤,并且 Jupyter
笔记本
开始:
![
Run the TensorFlow container
](
img/00153.jpg
)
...
...
@@ -300,14 +300,14 @@ Bazel(`bazel.io`)是一个构建工具,基于 Google 七年来一直使用
与诸如 Gradle 之类的竞争项目相比,优点有所不同,主要优点是:
*
支持多种语言,例如 C
++,Java,Python 等
*
支持多种语言,例如 C++,Java,Python 等
*
支持创建 Android 和 iOS 应用,甚至 Docker 映像
*
支持使用来自许多不同来源的库,例如 GitHub,Maven 等
*
通过 API 可扩展以添加自定义构建规则
#### 添加 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
...
...
@@ -450,7 +450,7 @@ $ cd tensorflow
```
然后我们只需运行
configure
脚本:
然后我们只需运行
`configure`
脚本:
```
py
$
.
/
configure
...
...
@@ -524,7 +524,7 @@ TensorFlow GPU 测试
![
Downloading the Docker toolbox installer
](
img/00158.jpg
)
Docker
Toolbox 安装第一个
屏幕
Docker
工具箱第一个安装
屏幕
![
Downloading the Docker toolbox installer
](
img/00159.jpg
)
...
...
@@ -534,7 +534,7 @@ Docker 工具箱安装程序路径选择器
![
Downloading the Docker toolbox installer
](
img/00160.jpg
)
Docker
Toolbox
软件包选择屏幕
Docker
工具箱
软件包选择屏幕
完成各种安装操作后,我们的 Docker 安装将准备就绪:
...
...
@@ -544,7 +544,7 @@ Docker 工具箱安装最终屏幕
#### 创建 Docker 机器
为了创建初始机器,我们将在 Docker
Terminal
中执行以下命令:
为了创建初始机器,我们将在 Docker
终端
中执行以下命令:
```
py
docker
-
machine
create
vdocker
-
d
virtualbox
...
...
@@ -580,15 +580,15 @@ run -it -p 8888:8888 gcr.io/tensorflow/tensorflow bash
```
# MacOS
X 安装
# MacOSX 安装
现在转到在 MacOS
X 上进行安装。安装过程与 Linux 非常相似。 它们基于 OS
X El Capitan 版本。 我们还将参考不支持 GPU 的 2.7 版 Python。
现在转到在 MacOS
X 上进行安装。安装过程与 Linux 非常相似。 它们基于 OS
X El Capitan 版本。 我们还将参考不支持 GPU 的 2.7 版 Python。
安装要求安装用户具有
sudo
特权。
安装要求安装用户具有
`sudo`
特权。
## 安装点
在此步骤中,我们将使用
`easy_install`
软件包管理器安装
pip
软件包管理器,该软件包管理器包含在安装工具 Python 软件包中,并且默认情况下包含在操作系统中。
在此步骤中,我们将使用
`easy_install`
软件包管理器安装
PIP
软件包管理器,该软件包管理器包含在安装工具 Python 软件包中,并且默认情况下包含在操作系统中。
对于此安装,我们将在终端中执行以下操作:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录