Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lzh_me
apachecn-dl-zh
提交
35fc6b1f
A
apachecn-dl-zh
项目概览
lzh_me
/
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,发现更多精彩内容 >>
提交
35fc6b1f
编写于
8月 07, 2020
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2020-08-07 18:26:09
上级
8ea1bbd3
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
32 addition
and
32 deletion
+32
-32
docs/build-ml-proj-tf-zh/ch04.md
docs/build-ml-proj-tf-zh/ch04.md
+8
-8
docs/build-ml-proj-tf-zh/ch05.md
docs/build-ml-proj-tf-zh/ch05.md
+12
-12
docs/build-ml-proj-tf-zh/ch06.md
docs/build-ml-proj-tf-zh/ch06.md
+11
-11
docs/build-ml-proj-tf-zh/ch07.md
docs/build-ml-proj-tf-zh/ch07.md
+1
-1
未找到文件。
docs/build-ml-proj-tf-zh/ch04.md
浏览文件 @
35fc6b1f
...
...
@@ -18,13 +18,13 @@
在上图中,我们可以看到如何对旧问题和新问题进行分类。 第一个(线性回归)可以想象为价值不断增长的连续体。
另一个是基于
`x`
值的输出只能具有两个不同值的域。 在第二张图的特定情况下,我们可以看到对其中一个选项的特定偏向极端:在左侧,
偏向 0
`y`
值,在右侧偏向某个值。 共
1。
另一个是基于
`x`
值的输出只能具有两个不同值的域。 在第二张图的特定情况下,我们可以看到对其中一个选项的特定偏向极端:在左侧,
`y`
值偏向 0,在右侧偏向
1。
鉴于即使在进行回归从而寻找连续值的情况下,这种项也可能有些棘手,实际上,最终目标是为具有离散变量的分类问题建立预测。
此处的关键是要了解我们将获得与类有关的项目的概率,而不是完全离散的值。
# sigmoid 函数的前身 --
Logit
函数
# sigmoid 函数的前身 --
对率(Logit)
函数
在研究逻辑函数之前,我们将回顾该函数所基于的原始函数,并为其提供一些更一般的属性。
...
...
@@ -48,7 +48,7 @@
在尝试建立广义线性模型时,我们要从线性函数开始,并从因变量开始,获取到概率分布的映射。
由于选项具有二元性质,因此通常选择的分布是最近提到的
Bernoulli
分布,而倾向于 logistic 函数的链接函数是
`logit`
函数。
由于选项具有二元性质,因此通常选择的分布是最近提到的
伯努利
分布,而倾向于 logistic 函数的链接函数是
`logit`
函数。
## Logit 函数
...
...
@@ -86,7 +86,7 @@
![
Logistic function as a linear modeling generalization
](
img/00064.jpg
)
该方程式的正常解释是
`t`
代表一个简单的自变量。 但是,我们将改进此模型,并假定
`t`
是单个解释变量
`x`
的线性函数(对
t
是多个解释变量的线性组合的情况进行类似处理)。
该方程式的正常解释是
`t`
代表一个简单的自变量。 但是,我们将改进此模型,并假定
`t`
是单个解释变量
`x`
的线性函数(对
`t`
是多个解释变量的线性组合的情况进行类似处理)。
然后,我们将
`t`
表示为:
...
...
@@ -102,7 +102,7 @@
![
Final estimated regression equation
](
img/00067.jpg
)
下图将显示如何将从任意范围的映射最终转换为范围
`[0, 1]`
,该范围可以解释为表示事件发生的概率
p
:
下图将显示如何将从任意范围的映射最终转换为范围
`[0, 1]`
,该范围可以解释为表示事件发生的概率
`p`
:
![
Final estimated regression equation
](
img/00068.jpg
)
...
...
@@ -137,7 +137,7 @@
*
第二个由一组概率组成,其中我们代表一个类别相对于所有其他类别的概率。
*
第二种方法是
`softmax`
回归的输出格式,它是 n 个类的逻辑回归的概括。
因此,为了训练样本,我们将使用句柄
`y(i)ε{1,...,K},`
将二元标签
`( y(i)ε{0,1})`
更改为向量标签,其中
`K`
是类别数,标签
Y
可以采用
`K`
不同的值, 而不是只有两个。
因此,为了训练样本,我们将使用句柄
`y(i)ε{1,...,K},`
将二元标签
`( y(i)ε{0,1})`
更改为向量标签,其中
`K`
是类别数,标签
`Y`
可以采用
`K`
不同的值, 而不是只有两个。
因此,对于这种特定技术,给定测试输入
`X`
,我们想要针对
`k=1,...,K`
的每个值估计
`P`
(
`y=k|x`
)的概率。
`softmax`
回归将输出
`K`
维向量(其元素总和为 1),从而为我们提供了
`K`
估计的概率。
...
...
@@ -173,7 +173,7 @@
为了将
`softmax`
函数用作回归函数,我们必须使用一种称为单热编码的编码。 这种编码形式只是将变量的数字整数值转换为数组,其中将值列表转换为数组列表,每个数组的长度与该列表的最大值相同,并且每个数组的表示方式是在值的索引上添加 1,其余元素保持为 0。
例如,这将是单热编码形式的列表
[1、3、2、4]
的表示形式:
例如,这将是单热编码形式的列表
`[1, 3, 2, 4]`
的表示形式:
```
py
[[
0
1
0
0
0
]
...
...
@@ -200,7 +200,7 @@ tf.one_hot(indices, depth, on_value=1, off_value=0, axis=None, dtype=tf.float32,
`Dtype`
是生成的张量的数据类型; 默认值为
`float32`
。
depth
变量定义每个元素将具有多少列。 我们假设它在逻辑上应该为
`max(indices) + 1`
,但也可以将其切掉。
`depth`
变量定义每个元素将具有多少列。 我们假设它在逻辑上应该为
`max(indices) + 1`
,但也可以将其切掉。
### TensorFlow 的 softmax 实现
...
...
docs/build-ml-proj-tf-zh/ch05.md
浏览文件 @
35fc6b1f
...
...
@@ -37,12 +37,12 @@
1.
用随机分布初始化权重(通常为低值)
2.
选择一个输入向量并将其呈现给网络,
3.
为指定的输入向量和权重值计算网络的输出
y'
。
3.
为指定的输入向量和权重值计算网络的输出
`y'`
。
4.
用于感知机的函数是:
![Perceptron algorithm](img/00080.jpg)
5.
如果
y'≠y
,则通过添加更改
`Δw = yx[i]`
修改所有连接
`w[i]`
5.
如果
`y' ≠ y`
,则通过添加更改
`Δw = yx[i]`
修改所有连接
`w[i]`
6.
返回步骤 2。
## 神经网络层
...
...
@@ -65,7 +65,7 @@
![Neural Network activation functions](img/00083.jpg)
*
Relu: 这称为整流线性单元,其主要优点之一是它不受“梯度消失”问题的影响,该问题通常存在于网络的第一层,趋向于 0 或很小的
epsilon
值:
*
Relu: 这称为整流线性单元,其主要优点之一是它不受“梯度消失”问题的影响,该问题通常存在于网络的第一层,趋向于 0 或很小的
`epsilon`
值:
![Neural Network activation functions](img/00084.jpg)
...
...
@@ -77,7 +77,7 @@
因此,一旦我们计算了总误差,并且将整个函数应用于原始数据,我们现在就必须尝试调整方程式中的所有变量以将其最小化。
正如
Optimization
领域所研究的那样,我们需要知道的是能够使该误差最小化的是损失函数的梯度。
正如
最优化
领域所研究的那样,我们需要知道的是能够使该误差最小化的是损失函数的梯度。
鉴于数据要经过许多权重和传递函数,因此必须通过链式法则来解决合成函数的梯度。
...
...
@@ -99,7 +99,7 @@
TensorFlow 导航中最常用的函数:
*
`tf.sigmoid(x)`
:标准 S
形
函数
*
`tf.sigmoid(x)`
:标准 S
igmoid
函数
*
`tf.tanh(x)`
:双曲正切
*
`tf.nn.relu(features)`
:Relu 传递函数
...
...
@@ -122,8 +122,8 @@ TensorFlow 损失优化方法如下所述:
让我们看一下以下 Sklearn 预处理实用程序:
*
`preprocessing.StandardScaler()`
:数据集的正则化是许多机器学习估计器的普遍要求,因此,为了使收敛更加直接,数据集将必须更像是标准正态分布,即具有零均值和单位方差的高斯曲线。 在实践中,我们通常会忽略分布的形状,而只是通过删除每个特征的平均值来变换数据以使其居中,然后通过将非恒定特征除以它们的标准偏差来缩放它。 对于此任务,我们使用
StandardScaler
,它实现了前面提到的任务。 它还存储转换,以便能够将其重新应用于测试集。
*
`StandardScaler`
。
`fit_transform()`
:简单地将数据调整为所需格式。
StandardScaler
对象将保存转换变量,因此您将能够取回非规格化数据。
*
`preprocessing.StandardScaler()`
:数据集的正则化是许多机器学习估计器的普遍要求,因此,为了使收敛更加直接,数据集将必须更像是标准正态分布,即具有零均值和单位方差的高斯曲线。 在实践中,我们通常会忽略分布的形状,而只是通过删除每个特征的平均值来变换数据以使其居中,然后通过将非恒定特征除以它们的标准偏差来缩放它。 对于此任务,我们使用
`StandardScaler`
,它实现了前面提到的任务。 它还存储转换,以便能够将其重新应用于测试集。
*
`StandardScaler`
。
`fit_transform()`
:简单地将数据调整为所需格式。
`StandardScaler`
对象将保存转换变量,因此您将能够取回非规格化数据。
*
`cross_validation.train_test_split`
:此方法将数据集分为训练和测试段,我们只需要提供分配给每个阶段的数据集的百分比即可。
# 第一个项目 -- 非线性合成函数回归
...
...
@@ -132,7 +132,7 @@ TensorFlow 损失优化方法如下所述:
用于回归的网络架构与用于分类问题的网络架构没有很大不同:它们可以采用多变量输入,也可以使用线性和非线性激活函数。
在某些情况下,唯一必要的情况是仅在层的末尾删除类似于 S
形
的函数,以允许出现所有选项。
在某些情况下,唯一必要的情况是仅在层的末尾删除类似于 S
igmoid
的函数,以允许出现所有选项。
在第一个示例中,我们将对一个简单的,有噪声的二次函数进行建模,并将尝试通过单个隐藏层网络对其进行回归,并查看我们可以多么接近地预测从测试总体中得出的值。
...
...
@@ -155,7 +155,7 @@ dsY = 0.4* pow(dsX,2) +2 * dsX + np.random.randn(*dsX.shape) * 0.22 + 0.8
## 数据集预处理
该数据集在生成时不需要进行预处理,并且具有良好的属性,例如居中并具有
-1,1 x
样本分布。
该数据集在生成时不需要进行预处理,并且具有良好的属性,例如居中并具有
`-1, 1`
的
样本分布。
## 建模架构 -- 损失函数描述
...
...
@@ -168,7 +168,7 @@ cost = tf.pow(py_x-Y, 2)/(2)
## 损失函数优化器
在这种情况下,我们将使用
Gradient Descent
成本优化器,可以通过以下代码调用该优化器:
在这种情况下,我们将使用
梯度下降
成本优化器,可以通过以下代码调用该优化器:
```
py
train_op
=
tf
.
train
.
AdamOptimizer
(
0.5
).
minimize
(
cost
)
...
...
@@ -261,7 +261,7 @@ Average cost for epoch 9:[[ 0.0007379]]
## 数据集说明和加载
对于这个问题,我们将分析一个非常著名的,标准的,格式正确的数据集,该数据集将使我们能够分析一个多变量问题:根据离散和连续的一些相关变量来猜测汽车的
mpg
。
对于这个问题,我们将分析一个非常著名的,标准的,格式正确的数据集,该数据集将使我们能够分析一个多变量问题:根据离散和连续的一些相关变量来猜测汽车的
MPG
。
这可以被认为是一个玩具,并且有些过时了,但是它将为更复杂的问题铺平道路,并且具有已经被众多书目分析的优势。
...
...
@@ -387,7 +387,7 @@ print(" Total Mean Squared Error: " + str(score))
*
花青素
*
色彩强度
*
色调
*
稀释酒的 OD280
/
OD315
*
稀释酒的 OD280
/
OD315
*
脯氨酸
要读取数据集,我们将仅使用提供的 CSV 文件和熊猫:
...
...
docs/build-ml-proj-tf-zh/ch06.md
浏览文件 @
35fc6b1f
...
...
@@ -102,7 +102,7 @@ tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu, data_format, nam
*
`strides`
:这是四个
`int`
张量数据类型的列表,这些数据类型指示每个维度的滑动窗口。
*
`Padding`
:可以是
`SAME`
或
`VALID`
。
`SAME`
将尝试保留初始张量尺寸,但
`VALID`
将允许其增长,以防计算输出大小和填充。
*
`use_cudnn_on_gpu`
:这指示是否使用
`CUDA GPU CNN`
库来加速计算。
*
`data_format`
:这指定数据的组织顺序(
NHWC 或 NCWH
)。
*
`data_format`
:这指定数据的组织顺序(
`NHWC`
或
`NCWH`
)。
### 其他卷积运算
...
...
@@ -172,7 +172,7 @@ coord.join(threads)
在 TensorFlow 中通过称为池的操作执行二次采样操作。 这个想法是应用一个(大小不一的)内核并提取内核覆盖的元素之一,其中
`max_pool`
和
`avg_pool`
是最著名的一些元素,它们仅获得最大和平均值。 应用内核的元素。
在下图中,您可以看到将
`2x2`
内核应用于单通道
16x16
矩阵的操作。 它只是保持其覆盖的内部区域的最大值。
在下图中,您可以看到将
`2x2`
内核应用于单通道
`16x16`
矩阵的操作。 它只是保持其覆盖的内部区域的最大值。
![
Subsampling operation - pooling
](
img/00095.jpg
)
...
...
@@ -204,7 +204,7 @@ tf.nn.max_pool(value, ksize, strides, padding, data_format, name)
*
`ksize`
:这是一个整数列表,代表每个维度上的窗口大小
*
`strides`
:这是在每个尺寸上移动窗口的步骤
*
`data_format`
:设置数据尺寸
*
`ordering`
:
NHWC 或 NCHW
*
`ordering`
:
`NHWC`
或
`NCHW`
*
`padding`
:
`VALID`
或
`SAME`
### 其他池化操作
...
...
@@ -258,23 +258,23 @@ coord.join(threads)
![
Sample code
](
img/00096.jpg
)
## 提高效率 -
dropout
操作
## 提高效率 -
丢弃
操作
在大型神经网络训练过程中观察到的主要优点之一是过拟合,即为训练数据生成非常好的近似值,但为单点之间的区域发出噪声。
在过拟合的情况下,该模型专门针对训练数据集进行了调整,因此对于一般化将无用。 因此,尽管它在训练集上表现良好,但是由于缺乏通用性,因此它在测试数据集和后续测试中的表现很差。
因此,引入了
dropout
操作。 此操作将某些随机选择的权重的值减小为零,从而使后续层为零。
因此,引入了
丢弃
操作。 此操作将某些随机选择的权重的值减小为零,从而使后续层为零。
这种方法的主要优点是,它避免了一层中的所有神经元同步优化其权重。 随机分组进行的这种适应避免了所有神经元都收敛到相同的目标,从而使适应的权重解相关。
在
dropout
应用中发现的第二个属性是隐藏单元的激活变得稀疏,这也是理想的特性。
在
丢弃
应用中发现的第二个属性是隐藏单元的激活变得稀疏,这也是理想的特性。
在下图中,我们表示了原始的完全连接的多层神经网络以及具有链接的
dropout
的关联网络:
在下图中,我们表示了原始的完全连接的多层神经网络以及具有链接的
丢弃
的关联网络:
![
Improving efficiency - dropout operation
](
img/00097.jpg
)
### 在 TensorFlow 中应用
dropout
操作
### 在 TensorFlow 中应用
丢弃
操作
为了应用
`dropout`
操作,TensorFlows 实现了
`tf.nn.dropout`
方法,其工作方式如下:
...
...
@@ -290,9 +290,9 @@ tf.nn.dropout (x, keep_prob, noise_shape, seed, name)
#### 示例代码
在此样本中,我们将对样本向量应用
dropout 操作。 Dropout 还可以将 Dropout
传输到所有与架构相关的单元。
在此样本中,我们将对样本向量应用
丢弃操作。 丢弃还可以将丢弃
传输到所有与架构相关的单元。
在下面的示例中,您可以看到将
dropout 应用于
`x`
变量的结果,其归零概率为 0.5,并且在未发生这种情况的情况下,值加倍(乘以 1 / 1.5, dropout
概率):
在下面的示例中,您可以看到将
丢弃应用于
`x`
变量的结果,其归零概率为 0.5,并且在未发生这种情况的情况下,值加倍(乘以
`1 / 1.5`
,丢弃
概率):
![
Sample code
](
img/00098.jpg
)
...
...
@@ -357,7 +357,7 @@ MNIST 是易于理解和阅读但难以掌握的数据集。 当前,有很多
![
Dataset description and loading
](
img/00101.jpg
)
要打印字符(在 Jupyter
Notebook
中),我们将重塑表示图像的线性方式,形成
`28x28`
的方矩阵,分配灰度色图,并使用以下行绘制所得的数据结构:
要打印字符(在 Jupyter
笔记本
中),我们将重塑表示图像的线性方式,形成
`28x28`
的方矩阵,分配灰度色图,并使用以下行绘制所得的数据结构:
```
py
plt
.
imshow
(
mnist
.
train
.
images
[
0
].
reshape
((
28
,
28
),
order
=
'C'
),
cmap
=
'Greys'
,
interpolation
=
'nearest'
)
...
...
docs/build-ml-proj-tf-zh/ch07.md
浏览文件 @
35fc6b1f
...
...
@@ -74,7 +74,7 @@ LSTM 单元格的一般结构
### 第 1 部分 -- 设置要忘记的值(输入门)
在本节中,我们将采用来自短期的值,再加上输入本身,并且这些值将由多元 S 型表示的二元函数的值设置。 根据输入和短期记忆值,S
形
输出将允许或限制一些先前的知识或单元状态中包含的权重。
在本节中,我们将采用来自短期的值,再加上输入本身,并且这些值将由多元 S 型表示的二元函数的值设置。 根据输入和短期记忆值,S
igmoid
输出将允许或限制一些先前的知识或单元状态中包含的权重。
![
Part 1 - set values to forget (input gate)
](
img/00110.jpg
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录