Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
D_ACMER
apachecn-dl-zh
提交
74232705
A
apachecn-dl-zh
项目概览
D_ACMER
/
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,发现更多精彩内容 >>
提交
74232705
编写于
9月 10, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-09-10 22:53:30
上级
c0d40257
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
18 addition
and
18 deletion
+18
-18
docs/tf-20-quick-start-guide/02.md
docs/tf-20-quick-start-guide/02.md
+9
-9
docs/tf-20-quick-start-guide/03.md
docs/tf-20-quick-start-guide/03.md
+1
-1
docs/tf-20-quick-start-guide/04.md
docs/tf-20-quick-start-guide/04.md
+4
-4
docs/tf-20-quick-start-guide/05.md
docs/tf-20-quick-start-guide/05.md
+1
-1
docs/tf-20-quick-start-guide/06.md
docs/tf-20-quick-start-guide/06.md
+1
-1
docs/tf-20-quick-start-guide/07.md
docs/tf-20-quick-start-guide/07.md
+1
-1
docs/tf-20-quick-start-guide/08.md
docs/tf-20-quick-start-guide/08.md
+1
-1
未找到文件。
docs/tf-20-quick-start-guide/02.md
浏览文件 @
74232705
...
@@ -25,7 +25,7 @@
...
@@ -25,7 +25,7 @@
Keras 具有许多优点,其中包括:
Keras 具有许多优点,其中包括:
*
它专为新用户和专家而设计,提供一致且简单的 API
*
它专为新用户和专家而设计,提供一致且简单的 API
*
通过简单,一致的
界面对用户友好,该界面
针对常见用例进行了优化
*
通过简单,一致的
接口对用户友好,该接口
针对常见用例进行了优化
*
它为用户错误提供了很好的反馈,这些错误很容易理解,并且经常伴随有用的建议
*
它为用户错误提供了很好的反馈,这些错误很容易理解,并且经常伴随有用的建议
*
它是模块化且可组合的; Keras 中的模型是通过结合可配置的构建块来构建的
*
它是模块化且可组合的; Keras 中的模型是通过结合可配置的构建块来构建的
*
通过编写自定义构建块很容易扩展
*
通过编写自定义构建块很容易扩展
...
@@ -54,7 +54,7 @@ Keras 可能是不寻常的,因为它具有作为独立开源项目维护的
...
@@ -54,7 +54,7 @@ Keras 可能是不寻常的,因为它具有作为独立开源项目维护的
急切的执行意味着代码的执行是命令式编程环境,而不是基于图的环境,这是在 TensorFlow(v1.5 之前)的初始产品中工作的唯一方法。 这种命令式(即刻)风格允许直观的调试,快速的开发迭代,支持 TensorFlow
`SavedModel`
格式,并内置支持对 CPU,GPU 甚至 Google 自己的硬件
**张量处理单元**
(
**TPU**
)进行分布式训练。
急切的执行意味着代码的执行是命令式编程环境,而不是基于图的环境,这是在 TensorFlow(v1.5 之前)的初始产品中工作的唯一方法。 这种命令式(即刻)风格允许直观的调试,快速的开发迭代,支持 TensorFlow
`SavedModel`
格式,并内置支持对 CPU,GPU 甚至 Google 自己的硬件
**张量处理单元**
(
**TPU**
)进行分布式训练。
TensorFlow 实
施
还支持
`tf.data`
,分发策略,导出模型(可通过 TensorFlow Lite 部署在移动和嵌入式设备上)以及用于表示和分类结构化数据的特征列。
TensorFlow 实
现
还支持
`tf.data`
,分发策略,导出模型(可通过 TensorFlow Lite 部署在移动和嵌入式设备上)以及用于表示和分类结构化数据的特征列。
# 默认的 Keras 配置文件
# 默认的 Keras 配置文件
...
@@ -152,7 +152,7 @@ Keras **数据类型**(`dtypes`)与 TensorFlow Python 数据类型相同,
...
@@ -152,7 +152,7 @@ Keras **数据类型**(`dtypes`)与 TensorFlow Python 数据类型相同,
# Keras 模型
# Keras 模型
Keras 基于神经网络模型的概念。 主要模型称为
**序列**
,是层的线性
堆
栈。 还有一个使用 Keras 函数式 API 的系统。
Keras 基于神经网络模型的概念。 主要模型称为
**序列**
,是层的线性栈。 还有一个使用 Keras 函数式 API 的系统。
# Keras 顺序模型
# Keras 顺序模型
...
@@ -168,7 +168,7 @@ Keras 基于神经网络模型的概念。 主要模型称为**序列**,是层
...
@@ -168,7 +168,7 @@ Keras 基于神经网络模型的概念。 主要模型称为**序列**,是层
# 创建顺序模型的第一种方法
# 创建顺序模型的第一种方法
首先,可以将图层实例列表传递给构造
函数
,如以下示例所示。
首先,可以将图层实例列表传递给构造
器
,如以下示例所示。
在下一章中,我们将对层进行更多的讨论。 目前,我们将仅作足够的解释,以使您了解此处发生的情况。
在下一章中,我们将对层进行更多的讨论。 目前,我们将仅作足够的解释,以使您了解此处发生的情况。
...
@@ -197,7 +197,7 @@ train_y, test_y = tf.cast(train_y,tf.int64),tf.cast(test_y,tf.int64)
...
@@ -197,7 +197,7 @@ train_y, test_y = tf.cast(train_y,tf.int64),tf.cast(test_y,tf.int64)
注意在模型定义中我们如何传递图层列表:
注意在模型定义中我们如何传递图层列表:
*
`Flatten`
接受
`28 x 28`
(即 2D)像素图像的输入,并产生 784(即 1D)
矢
量,因为下一个(密集)层是一维的。
*
`Flatten`
接受
`28 x 28`
(即 2D)像素图像的输入,并产生 784(即 1D)
向
量,因为下一个(密集)层是一维的。
*
`Dense`
是一个完全连接的层,意味着其所有神经元都连接到上一层和下一层中的每个神经元。 下面的示例有 512 个神经元,其输入通过 ReLU(非线性)激活函数传递。
*
`Dense`
是一个完全连接的层,意味着其所有神经元都连接到上一层和下一层中的每个神经元。 下面的示例有 512 个神经元,其输入通过 ReLU(非线性)激活函数传递。
*
`Dropout`
随机关闭上一层神经元的一部分(在这种情况下为 0.2)。 这样做是为了防止任何特定的神经元变得过于专业化,并导致模型
*与数据*
过拟合,从而影响测试数据上模型的准确性指标(在后面的章节中将对此进行更多介绍)。
*
`Dropout`
随机关闭上一层神经元的一部分(在这种情况下为 0.2)。 这样做是为了防止任何特定的神经元变得过于专业化,并导致模型
*与数据*
过拟合,从而影响测试数据上模型的准确性指标(在后面的章节中将对此进行更多介绍)。
*
最后的
`Dense`
层具有一个称为
`softmax`
的特殊激活函数,该函数将概率分配给可能的 10 个输出单元中的每一个:
*
最后的
`Dense`
层具有一个称为
`softmax`
的特殊激活函数,该函数将概率分配给可能的 10 个输出单元中的每一个:
...
@@ -236,7 +236,7 @@ model1.compile (optimizer= optimiser, loss='sparse_categorical_crossentropy', me
...
@@ -236,7 +236,7 @@ model1.compile (optimizer= optimiser, loss='sparse_categorical_crossentropy', me
model1
.
fit
(
train_x
,
train_y
,
batch_size
=
batch_size
,
epochs
=
epochs
)
model1
.
fit
(
train_x
,
train_y
,
batch_size
=
batch_size
,
epochs
=
epochs
)
```
```
呼叫
`fit()`
的输出如下,显示了时期训练时间,丢失和准确性:
调用
`fit()`
的输出如下,显示了时期训练时间,丢失和准确性:
```
py
```
py
Epoch
1
/
10
60000
/
60000
[
==============================
]
-
5
s
77
us
/
step
-
loss
:
0.2031
-
acc
:
0.9394
...
Epoch
1
/
10
60000
/
60000
[
==============================
]
-
5
s
77
us
/
step
-
loss
:
0.2031
-
acc
:
0.9394
...
...
@@ -259,7 +259,7 @@ model1.evaluate(test_x, test_y)
...
@@ -259,7 +259,7 @@ model1.evaluate(test_x, test_y)
# 创建顺序模型的第二种方法
# 创建顺序模型的第二种方法
对于同一体系结构,将层列表传递给
`Sequential`
模型的构造
函数
的替代方法是使用
`add`
方法,如下所示:
对于同一体系结构,将层列表传递给
`Sequential`
模型的构造
器
的替代方法是使用
`add`
方法,如下所示:
```
py
```
py
model2
=
tf
.
keras
.
models
.
Sequential
();
model2
=
tf
.
keras
.
models
.
Sequential
();
...
@@ -289,7 +289,7 @@ model2.evaluate(test_x, test_y)
...
@@ -289,7 +289,7 @@ model2.evaluate(test_x, test_y)
# Keras 函数式 API
# Keras 函数式 API
与以前看到的
`Sequential`
模型的简单线性
堆
栈相比,函数式 API 使您可以构建更复杂的体系结构。 它还支持更高级的模型。 这些模型包括多输入和多输出模型,具有共享层的模型以及具有剩余连接的模型。
与以前看到的
`Sequential`
模型的简单线性栈相比,函数式 API 使您可以构建更复杂的体系结构。 它还支持更高级的模型。 这些模型包括多输入和多输出模型,具有共享层的模型以及具有剩余连接的模型。
这是函数式 API 的使用的简短示例,其架构与前两个相同。
这是函数式 API 的使用的简短示例,其架构与前两个相同。
...
@@ -342,7 +342,7 @@ model3.evaluate(test_x, test_y)
...
@@ -342,7 +342,7 @@ model3.evaluate(test_x, test_y)
Keras
`Model`
类可以被子类化,如下面的代码所示。 Google 指出,
*纯*
函数风格(如前面的示例所示)比子类风格更可取(我们在此包括其内容是出于完整性的考虑,因为它很有趣)。
Keras
`Model`
类可以被子类化,如下面的代码所示。 Google 指出,
*纯*
函数风格(如前面的示例所示)比子类风格更可取(我们在此包括其内容是出于完整性的考虑,因为它很有趣)。
首先,请注意如何在构造
函数
(
`.__init__()`
)中分别声明和命名图层。
首先,请注意如何在构造
器
(
`.__init__()`
)中分别声明和命名图层。
然后,注意在
`call()`
方法中各层如何以函数风格链接在一起。 此方法封装了
*前向传播*
:
然后,注意在
`call()`
方法中各层如何以函数风格链接在一起。 此方法封装了
*前向传播*
:
...
...
docs/tf-20-quick-start-guide/03.md
浏览文件 @
74232705
...
@@ -321,7 +321,7 @@ print(y_train_ohe[i]) #
...
@@ -321,7 +321,7 @@ print(y_train_ohe[i]) #
# 层
# 层
ANN 使用的基本数据结构是
**层**
,许多相互连接的层构成了一个完整的 ANN。 可以将一层设想为神经元的
阵列
,尽管使用单词
*神经元*
可能会产生误导,因为在人脑神经元和构成一层的人工神经元之间只有很少的对应关系。 记住这一点,我们将在下面使用术语
*神经元*
。 与任何计算机处理单元一样,神经元的特征在于其输入和输出。 通常,神经元具有许多输入和一个输出值。 每个输入连接均带有权重
`w[i]`
。
ANN 使用的基本数据结构是
**层**
,许多相互连接的层构成了一个完整的 ANN。 可以将一层设想为神经元的
数组
,尽管使用单词
*神经元*
可能会产生误导,因为在人脑神经元和构成一层的人工神经元之间只有很少的对应关系。 记住这一点,我们将在下面使用术语
*神经元*
。 与任何计算机处理单元一样,神经元的特征在于其输入和输出。 通常,神经元具有许多输入和一个输出值。 每个输入连接均带有权重
`w[i]`
。
下图显示了一个神经元。 重要的是要注意,激活函数
`f`
对于平凡的 ANN 而言是非线性的。 网络中的一般神经元接收来自其他神经元的输入,并且每个神经元的权重为
`w[i]`
,如图所示,网络
*通过调整这些权重来学习权重*
,以便输入生成所需的输出:
下图显示了一个神经元。 重要的是要注意,激活函数
`f`
对于平凡的 ANN 而言是非线性的。 网络中的一般神经元接收来自其他神经元的输入,并且每个神经元的权重为
`w[i]`
,如图所示,网络
*通过调整这些权重来学习权重*
,以便输入生成所需的输出:
...
...
docs/tf-20-quick-start-guide/04.md
浏览文件 @
74232705
...
@@ -355,9 +355,9 @@ for i in range(10):
...
@@ -355,9 +355,9 @@ for i in range(10):
这具有直接的优势,即我们可以在我们的子类化模型中使用
`tf.keras.Model`
的所有功能,包括编译和训练例程以及层功能,在后续的章节中,我们将详细介绍。
这具有直接的优势,即我们可以在我们的子类化模型中使用
`tf.keras.Model`
的所有功能,包括编译和训练例程以及层功能,在后续的章节中,我们将详细介绍。
对于我们的逻辑回归示例,我们需要在子类中编写两个方法。 首先,我们需要编写一个构造
函数,该构造函数调用超类的构造函数,以便正确创建模型。 在这里,我们传入正在使用的类数(
`10`
),并在实例化模型以创建单个层时使用此构造函数
。 我们还必须声明
`call`
方法,并使用该方法来编程在模型训练的正向传递过程中发生的情况。
对于我们的逻辑回归示例,我们需要在子类中编写两个方法。 首先,我们需要编写一个构造
器,该构造器调用超类的构造器,以便正确创建模型。 在这里,我们传入正在使用的类数(
`10`
),并在实例化模型以创建单个层时使用此构造器
。 我们还必须声明
`call`
方法,并使用该方法来编程在模型训练的正向传递过程中发生的情况。
稍后,当我们考虑具有前向和后向传递的神经网络时,我们将对这种情况进行更多说明。 对于我们当前的目的,我们只需要知道在
`call`
方法中,我们采用输入的
`softmax`
来产生输出。
`softmax`
函数的作用是获取一个
矢量(或张量),然后在其元素具有该矢
量最大值的位置上用几乎为 1 的值覆盖,在所有其他位置上使用几乎为零的值覆盖。 这与单热编码很相似。 请注意,在此方法中,由于
`softmax`
未为 GPU 实现,因此我们必须在 CPU 上强制执行:
稍后,当我们考虑具有前向和后向传递的神经网络时,我们将对这种情况进行更多说明。 对于我们当前的目的,我们只需要知道在
`call`
方法中,我们采用输入的
`softmax`
来产生输出。
`softmax`
函数的作用是获取一个
向量(或张量),然后在其元素具有该向
量最大值的位置上用几乎为 1 的值覆盖,在所有其他位置上使用几乎为零的值覆盖。 这与单热编码很相似。 请注意,在此方法中,由于
`softmax`
未为 GPU 实现,因此我们必须在 CPU 上强制执行:
```
py
```
py
# model definition (the canonical Google way)
# model definition (the canonical Google way)
...
@@ -466,7 +466,7 @@ KNN 背后的想法相对简单。 给定新的特定数据点的值,请查看
...
@@ -466,7 +466,7 @@ KNN 背后的想法相对简单。 给定新的特定数据点的值,请查看
有 150 个数据点(每个数据点都包含前面提到的四个测量值)和 150 个相关标签。 我们将它们分为 120 个训练数据点和 30 个测试数据点。
有 150 个数据点(每个数据点都包含前面提到的四个测量值)和 150 个相关标签。 我们将它们分为 120 个训练数据点和 30 个测试数据点。
首先,我们有通常的
进口
,如下所示:
首先,我们有通常的
导入
,如下所示:
```
py
```
py
import
numpy
as
np
import
numpy
as
np
...
@@ -531,7 +531,7 @@ k = 5
...
@@ -531,7 +531,7 @@ k = 5
首先是我们的
`distance`
函数。 执行此函数后,可变距离包含我们 120 个训练点与 30 个测试点之间的所有(曼哈顿)距离; 也就是说,由 30 行乘 120 列组成的数组-曼哈顿距离,有时也称为
**城市街区距离**
,是
`x[1], x[2]`
的两个数据点向量的值之差的绝对值; 即
`|x[1] - x[2]|`
。 如果需要的话(如本例所示),将使用各个特征差异的总和。
首先是我们的
`distance`
函数。 执行此函数后,可变距离包含我们 120 个训练点与 30 个测试点之间的所有(曼哈顿)距离; 也就是说,由 30 行乘 120 列组成的数组-曼哈顿距离,有时也称为
**城市街区距离**
,是
`x[1], x[2]`
的两个数据点向量的值之差的绝对值; 即
`|x[1] - x[2]|`
。 如果需要的话(如本例所示),将使用各个特征差异的总和。
`tf.expand`
在
`test_x`
上增加了一个额外的维数,以便在减法发生之前,可以通过广播使两个
阵列
*扩展*
以使其与减法兼容。 由于
`x`
具有四个特征,并且
`reduce_sum`
超过
`axis=2`
,因此结果是我们 30 个测试点和 120 个训练点之间的距离的 30 行。 所以我们的
`prediction`
函数是:
`tf.expand`
在
`test_x`
上增加了一个额外的维数,以便在减法发生之前,可以通过广播使两个
数组
*扩展*
以使其与减法兼容。 由于
`x`
具有四个特征,并且
`reduce_sum`
超过
`axis=2`
,因此结果是我们 30 个测试点和 120 个训练点之间的距离的 30 行。 所以我们的
`prediction`
函数是:
```
py
```
py
def
prediction
(
train_x
,
test_x
,
train_y
,
k
):
def
prediction
(
train_x
,
test_x
,
train_y
,
k
):
...
...
docs/tf-20-quick-start-guide/05.md
浏览文件 @
74232705
...
@@ -228,7 +228,7 @@ plt.show()
...
@@ -228,7 +228,7 @@ plt.show()
# 构建模型
# 构建模型
我们最初的
进口包括我们的卷积网络的进口
。
我们最初的
导入包括我们的卷积网络的导入
。
注意,我们不必显式地使用 Keras,因为它是 TensorFlow 本身的模块,如以下代码所示:
注意,我们不必显式地使用 Keras,因为它是 TensorFlow 本身的模块,如以下代码所示:
...
...
docs/tf-20-quick-start-guide/06.md
浏览文件 @
74232705
...
@@ -460,7 +460,7 @@ x_train = x_train.astype('float32')/255
...
@@ -460,7 +460,7 @@ x_train = x_train.astype('float32')/255
x_test
=
x_test
.
astype
(
'float32'
)
/
255
x_test
=
x_test
.
astype
(
'float32'
)
/
255
```
```
如果将标签作为一站式
矢
量提供,则最好了解它们,因此,我们现在将这样做:
如果将标签作为一站式
向
量提供,则最好了解它们,因此,我们现在将这样做:
```
py
```
py
y_train
=
tf
.
keras
.
utils
.
to_categorical
(
y_train
,
number_of_classes
)
# or use tf.one_hot()
y_train
=
tf
.
keras
.
utils
.
to_categorical
(
y_train
,
number_of_classes
)
# or use tf.one_hot()
...
...
docs/tf-20-quick-start-guide/07.md
浏览文件 @
74232705
...
@@ -222,7 +222,7 @@ def get_model():
...
@@ -222,7 +222,7 @@ def get_model():
# 计算损失
# 计算损失
现在,我们需要两个图像的内容和风格之间的损失。 我们将使用均方损失如下。 请注意,
`image1 - image2`
中的减法是两个图像
阵列
之间逐元素的。 此减法有效,因为图像已在
`load_image`
中调整为相同大小:
现在,我们需要两个图像的内容和风格之间的损失。 我们将使用均方损失如下。 请注意,
`image1 - image2`
中的减法是两个图像
数组
之间逐元素的。 此减法有效,因为图像已在
`load_image`
中调整为相同大小:
```
py
```
py
def
rms_loss
(
image1
,
image2
):
def
rms_loss
(
image1
,
image2
):
...
...
docs/tf-20-quick-start-guide/08.md
浏览文件 @
74232705
...
@@ -378,7 +378,7 @@ else:
...
@@ -378,7 +378,7 @@ else:
# 建立并实例化我们的模型
# 建立并实例化我们的模型
如我们先前所见,一种用于构建模型的技术是将所需的层传递到
`tf.keras.Sequential()`
构造
函数
中。 在这种情况下,我们分为三层:嵌入层,RNN 层和密集层。
如我们先前所见,一种用于构建模型的技术是将所需的层传递到
`tf.keras.Sequential()`
构造
器
中。 在这种情况下,我们分为三层:嵌入层,RNN 层和密集层。
第一嵌入层是向量的查找表,一个向量用于每个字符的数值。 它的尺寸为
`embedding_dimension`
。 中间,循环层是 GRU; 其大小为
`recurrent_nn_units`
。 最后一层是长度为
`vocabulary_length`
单位的密集输出层。
第一嵌入层是向量的查找表,一个向量用于每个字符的数值。 它的尺寸为
`embedding_dimension`
。 中间,循环层是 GRU; 其大小为
`recurrent_nn_units`
。 最后一层是长度为
`vocabulary_length`
单位的密集输出层。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录