提交 8ea1bbd3 编写于 作者: W wizardforcel

2020-08-07 18:19:32

上级 e4b508d4
......@@ -114,7 +114,7 @@ x = tf.convert_to_tensor(x_data, dtype=tf.float32) #Finally, we create the tenso
#### 有用的方法
`tf.convert_to_tensor`:此函数将各种类型的 Python 对象转换为张量对象。 它接受 tensorobjects,numpy 数组,Python 列表和 Python 标量。
`tf.convert_to_tensor`:此函数将各种类型的 Python 对象转换为张量对象。 它接受张量对象,numpy 数组,Python 列表和 Python 标量。
## 完成工作 -- 与 TensorFlow 交互
......@@ -201,7 +201,7 @@ b = tf.Variable(tf.zeros([1000]))
参数:
* `from_version`:如果设置了此选项,它将返回带有从该版本添加的节点的`GraphDef`
* `add_shapes`:如果`true`,则向每个节点添加一个 shape 属性
* `add_shapes`:如果`true`,则向每个节点添加一个`shape`属性
### 建立图的示例
......@@ -271,11 +271,11 @@ versions {
# 运行我们的程序 -- 会话
客户端程序通过创建会话与 TensorFlow 系统交互。 会话对象表示将在其中运行计算的环境。 Session 对象开始为空,并且当程序员创建不同的操作和张量时,它们将被自动添加到 Session 中,在调用`Run()`方法之前,该对象不会进行任何计算。
客户端程序通过创建会话与 TensorFlow 系统交互。 会话对象表示将在其中运行计算的环境。 `Session`对象开始为空,并且当程序员创建不同的操作和张量时,它们将被自动添加到`Session`中,在调用`Run()`方法之前,该对象不会进行任何计算。
`Run()`方法采用一组需要计算的输出名称,以及一组可选的张量,以代替节点的某些输出输入到图中。
如果调用此方法,并且命名操作依赖于某些操作,则 Session 对象将执行所有这些操作,然后继续执行命名操作。
如果调用此方法,并且命名操作依赖于某些操作,则`Session`对象将执行所有这些操作,然后继续执行命名操作。
这条简单的线是创建会话所需的唯一一行:
......@@ -349,7 +349,7 @@ array([[ 0.20293398],
归约运算是对张量的一个维度进行运算的操作,而其维数较小。
支持的操作(具有相同参数)包括乘积,最小值,最大值,平均值,所有,任意和 accumulate_n)。
支持的操作(具有相同参数)包括乘积,最小值,最大值,平均值,所有,任意和`accumulate_n`)。
```py
In [1]: import tensorflow as tf
......@@ -592,7 +592,7 @@ TensorBoard 是一个软件实用程序,它允许数据流图的图形表示
TensorBoard GUI
可以将图的所有张量和操作设置为将信息写入日志。 TensorBoard 分析在 Session 运行时正常编写的信息,并向用户显示许多图形项,每个图形项一个。
可以将图的所有张量和操作设置为将信息写入日志。 TensorBoard 分析在`Session`运行时正常编写的信息,并向用户显示许多图形项,每个图形项一个。
### 命令行使用
......@@ -608,7 +608,7 @@ TensorBoard GUI
为了保存所有必需的信息,TensorFlow API 使用了称为摘要的数据输出对象。
这些摘要将结果写入 TensorFlow 事件文件,该文件收集在 Session 运行期间生成的所有必需数据。
这些摘要将结果写入 TensorFlow 事件文件,该文件收集在`Session`运行期间生成的所有必需数据。
在以下示例中,我们将直接在生成的事件日志目录上运行 TensorBoard:
......@@ -645,9 +645,9 @@ TensorFlow 中的操作在您运行它们或取决于它们的输出的操作之
这是不同的摘要类型及其构造所使用的参数的列表:
* `tf.scalar_summary`(标签,值,集合=无,名称=无)
* `tf.image_summary`(标签,张量,max_images = 3,集合=无,名称=无)
* `tf.histogram_summary`(标签,值,集合=无,名称=无)
* `tf.scalar_summary(label, value, collection=None, name=None)`
* `tf.image_summary(label, tensor, max_images=3, collection=None, name=None)`
* `tf.histogram_summary(label, value, collection=None, name=None)`
### 特殊摘要函数
......@@ -694,7 +694,7 @@ TensorFlow 读取许多最标准的格式,包括众所周知的 CSV,图像
为了读取众所周知的 CSV 格式,TensorFlow 有自己的方法。 与其他库(例如熊猫)相比,读取简单 CSV 文件的过程稍微复杂一些。
读取 CSV 文件需要完成前面的几个步骤。 首先,我们必须使用要使用的文件列表创建文件名队列对象,然后创建`TextLineReader`。 使用此行读取器,剩下的操作将是解码 CSV 列,并将其保存在张量上。 如果我们想将同类数据混合在一起,则 pack 方法将起作用。
读取 CSV 文件需要完成前面的几个步骤。 首先,我们必须使用要使用的文件列表创建文件名队列对象,然后创建`TextLineReader`。 使用此行读取器,剩下的操作将是解码 CSV 列,并将其保存在张量上。 如果我们想将同类数据混合在一起,则`pack`方法将起作用。
#### 鸢尾花数据集
......@@ -704,7 +704,7 @@ TensorFlow 读取许多最标准的格式,包括众所周知的 CSV,图像
为了读取 CSV 文件,您必须下载它并将其放在与 Python 可执行文件运行所在的目录中。
在下面的代码示例中,我们将从知名的 Iris 数据库中读取和打印前五个记录:
在下面的代码示例中,我们将从知名的鸢尾数据库中读取和打印前五个记录:
```py
import tensorflow as tf
......@@ -777,7 +777,7 @@ file.close()
![Loading and processing the images](img/00024.jpg)
比较原始图像和变更后的图像(flipUpDown 和 flipLeftRight
比较原始图像和变更后的图像(上下翻转和左右翻转
### 从标准 TensorFlow 格式读取
......
......@@ -8,8 +8,8 @@
* 了解群集的工作原理,并将其与替代的现有分类技术进行比较
* 使用 scikit-learn 和 matplotlib 丰富数据集选择的可能性,并获得看起来专业的数据图形表示
* 实现 k 均值聚类算法
* 实现最近邻法,并将结果与​​k 均值进行比较
* 实现 K 均值聚类算法
* 实现最近邻法,并将结果与​​K 均值进行比较
# 从数据中学习 -- 无监督学习
......@@ -31,15 +31,15 @@
样本聚类算法输出
# k 均值
# K 均值
k-means 是一种非常流行的聚类算法,可以轻松实现。 这非常简单,将它作为具有良好类分离性的数据集的第一个过程应用,可以对数据有很好的先验理解。
K 均值是一种非常流行的聚类算法,可以轻松实现。 这非常简单,将它作为具有良好类分离性的数据集的第一个过程应用,可以对数据有很好的先验理解。
## k 均值的力学
## K 均值的力学
k 均值尝试使用成员的平均值作为主要指标,将一组样本分成 k 个不相交的组或簇。 这一点通常称为质心,指代具有相同名称的算术实体,并表示为任意尺寸空间中的向量。
K 均值尝试使用成员的平均值作为主要指标,将一组样本分成 k 个不相交的组或簇。 这一点通常称为质心,指代具有相同名称的算术实体,并表示为任意尺寸空间中的向量。
k 均值是一种幼稚的方法,因为它通过查找适当的质心而起作用,但是不知道先验簇的数量是多少。
K 均值是一种幼稚的方法,因为它通过查找适当的质心而起作用,但是不知道先验簇的数量是多少。
为了评估多少簇能够很好地表示所提供的数据,Elbow 方法是一种比较流行的方法。
......@@ -49,17 +49,17 @@ k 均值是一种幼稚的方法,因为它通过查找适当的质心而起作
![Algorithm iteration criterion](img/00026.jpg)
k 均值的误差最小化准则
K 均值的误差最小化准则
![](img/tex-1.gif)
## k 均值算法细分
## K 均值算法细分
k-means 算法的机制可以通过以下流程图总结:
K 均值算法的机制可以通过以下流程图总结:
![k-means algorithm breakdown](img/00027.jpg)
k 均值过程的简化流程图
K 均值过程的简化流程图
该算法可以简化如下:
......@@ -75,9 +75,9 @@ k 均值过程的简化流程图
![k-means algorithm breakdown](img/00028.jpg)
k 均值简化图形
K 均值简化图形
### k 均值的优缺点
### K 均值的优缺点
这种方法的优点是:
......@@ -90,15 +90,15 @@ k 均值简化图形
* 离群值可以推入质心的值,因为它们的值与任何其他样本相同
* 由于我们假设该图是凸且各向同性的,因此对于非圆形定界簇来说效果不佳
# k 最近邻
# K 最近邻
k 最近邻(k-nn)是一种简单的经典聚类方法,它将很好地介绍此类技术,着眼于每个样本的附近,并假设每个新样本都应属于的类别。 已经知道的数据点。
K 最近邻(KNN)是一种简单的经典聚类方法,它将很好地介绍此类技术,着眼于每个样本的附近,并假设每个新样本都应属于的类别。 已经知道的数据点。
![k-nearest neighbors](img/00029.jpg)
## k 最近邻的力学
## K 最近邻的力学
k-nn 可以在我们的多种配置中实现,但是在本章中,我们将使用“半监督”方法。 我们将从一定数量的已分配样本开始,稍后我们将根据训练集的特征猜测集群成员。
KNN 可以在我们的多种配置中实现,但是在本章中,我们将使用“半监督”方法。 我们将从一定数量的已分配样本开始,稍后我们将根据训练集的特征猜测集群成员。
![Mechanics of k-nearest neighbors](img/00030.jpg)
......@@ -108,10 +108,10 @@ k-nn 可以在我们的多种配置中实现,但是在本章中,我们将使
1. 我们将先前已知的样本放在数据结构上。
2. 然后,我们读取要分类的下一个样本,并计算从新样本到训练集的每个样本的欧几里得距离。
3. 我们通过根据欧几里得距离选择最近的样本的类别来确定新元素的类别。 k-nn 方法需要对 k 个最接近的样本进行投票。
3. 我们通过根据欧几里得距离选择最近的样本的类别来确定新元素的类别。 KNN 方法需要对 k 个最接近的样本进行投票。
4. 我们重复该过程,直到没有剩余的样本为止。
### k-nn 的优缺点
### KNN 的优缺点
这种方法的优点是:
......@@ -201,7 +201,7 @@ sklearn.datasets.make_blobs(n_samples=100, n_features=2, centers=3, cluster_std
### 圆圈数据集
这是在其他圆圈中具有圆圈的数据集。 这是一个非线性的,可分离的问题,因此需要通过非线性模型来解决。 这排除了诸如 k 均值的简单算法。 在本章中,我们将尝试使用它来阐明观点。
这是在其他圆圈中具有圆圈的数据集。 这是一个非线性的,可分离的问题,因此需要通过非线性模型来解决。 这排除了诸如 K 均值的简单算法。 在本章中,我们将尝试使用它来阐明观点。
#### 采用的方法
......@@ -218,7 +218,7 @@ sklearn.datasets.make_circles(n_samples=100,shuffle=True,noise=None, random_stat
这是另一个非线性问题,但是具有另一种类型的类分离,因为没有诸如圆环之类的闭合。
# 项目 1 -- 在合成数据集上进行 k 均值聚类
# 项目 1 -- 在合成数据集上进行 K 均值聚类
## 数据集说明和加载
......@@ -244,7 +244,7 @@ data, features = make_blobs (n_samples=200, centers=centers, n_features = 2, clu
## 模型架构
points 变量包含数据集点的 2D 坐标,质心变量将包含组中心点的坐标,`cluster_assignments`变量包含每个数据元素的质心索引。
`points`变量包含数据集点的 2D 坐标,质心变量将包含组中心点的坐标,`cluster_assignments`变量包含每个数据元素的质心索引。
例如,`cluster_assignments[2] = 1`表示`data[2]`数据点属于具有中心重心`1`的群集。 重心`1`的位置位于`centroids[1]`中。
......@@ -270,7 +270,7 @@ plt.show()
## 损失函数描述和优化器循环
然后,我们将对所有质心进行 N 份复制,对每个点进行 K 份复制,对每个点进行 N x K 份复制,因此我们可以针对每个维度计算出每个点与每个质心之间的距离:
然后,我们将对所有质心进行 N 份复制,对每个点进行 K 份复制,对每个点进行`N x K`份复制,因此我们可以针对每个维度计算出每个点与每个质心之间的距离:
```py
rep_centroids = tf.reshape(tf.tile(centroids, [N, 1]), [N, K, 2])
......@@ -316,7 +316,7 @@ with tf.control_dependencies([did_assignments_change]):
这是一轮迭代后质心变化的汇总图,其中绘制了从算法生成的原始聚类。
在下图中,我们针对这种明显分离的情况表示了 k 均值算法在应用中的不同阶段:
在下图中,我们针对这种明显分离的情况表示了 K 均值算法在应用中的不同阶段:
![Results description](img/00035.jpg)
......@@ -424,7 +424,7 @@ print "Cluster assignments:", assignments
这是观察算法机制的最简单情况。 当数据来自真实世界时,这些类通常没有那么清晰地分开,并且标记数据样本更加困难。
## 圆合成数据上的 k 均值
## 圆合成数据上的 K 均值
对于圆图,我们观察到这种数据表征并不容易用一组简单的方法表示。 如图所示,两个圆要么共享一个质心的位置,要么真的很接近,因此我们无法预测明确的结果:
......@@ -436,13 +436,13 @@ print "Cluster assignments:", assignments
![k-means on circle synthetic data](img/00037.jpg)
k 均值应用于圆形综合数据集
K 均值应用于圆形综合数据集
如我们所见,初始中心向样本数量最集中的区域漂移,因此将数据线性划分。 这是我们现阶段使用的简单模型的局限性之一。 为了处理非线性可分离性样本,我们可以尝试本章范围以外的其他统计方法,例如基于密度的带噪应用空间聚类(DBSCAN)。
# 项目 2 -- 综合数据集上的最近邻
在这个项目中,我们将加载一个数据集,使用该数据集,以前的算法(k 均值)在分离类时遇到问题。
在这个项目中,我们将加载一个数据集,使用该数据集,以前的算法(K 均值)在分离类时遇到问题。
## 数据集生成
......@@ -485,7 +485,7 @@ neighbor = tf.arg_min(distances,0)
## 结果描述
这是测试数据类分布的图形,在这里我们可以看到清晰分开的类。 我们可以观察到,至少在此有限的数据集范围内,此方法比非重叠,斑点优化,k 均值方法更好。
这是测试数据类分布的图形,在这里我们可以看到清晰分开的类。 我们可以观察到,至少在此有限的数据集范围内,此方法比非重叠,斑点优化,K 均值方法更好。
![Results description](img/00039.jpg)
......
......@@ -91,9 +91,9 @@ plt.plot (trX, .2 + 2 * trX)
![Iterative methods - gradient descent](img/00046.jpg)
在该方程式中,我们可以轻松推导该方法的机理。 我们从一组初始系数开始,然后朝函数最大变化的相反方向移动。 `α`变量被称为 step,将影响我们在梯度搜索方向上移动最小的距离。
在该方程式中,我们可以轻松推导该方法的机理。 我们从一组初始系数开始,然后朝函数最大变化的相反方向移动。 `α`变量被称为步长,将影响我们在梯度搜索方向上移动最小的距离。
最后一步是可选地测试迭代之间的更改,并查看更改是否大于 epsilon 或检查是否达到了迭代次数。
最后一步是可选地测试迭代之间的更改,并查看更改是否大于`epsilon`或检查是否达到了迭代次数。
如果函数不是凸函数,建议使用随机值多次运行梯度下降,然后选择成本值最低的系数。 在非凸函数的情况下,梯度下降最终以最小值出现,这可能是局部的。 因此,对于非凸函数,结果取决于初始值,建议将它们随机设置多次,并在所有解决方案中选择成本最低的解决方案。
......@@ -268,7 +268,7 @@ plt.plot (trX, .2 + 2 * trX)
![Cost function description and Optimizer loop](img/00049.jpg)
放大 CostFunction 范围后,我们可以看到幂和减法运算以及书面摘要,如下图所示:
放大损失函数范围后,我们可以看到幂和减法运算以及书面摘要,如下图所示:
![Cost function description and Optimizer loop](img/00050.jpg)
......@@ -300,7 +300,7 @@ plt.plot (trX, testb + trX * testw)
现在,让我们回顾一下保存在 TensorBoard 中的数据。
为了启动 TensorBoard,您可以转到 logs 目录并执行以下行:
为了启动 TensorBoard,您可以转到`logs`目录并执行以下行:
```py
$ tensorboard --logdir=.
......@@ -430,8 +430,8 @@ plt.plot (trX, sess.run(b) + trX * sess.run(w))
* `RAD`:径向公路的可达性指数
* `TAX`:每 10,000 美元的全值财产税率
* `PTRATIO`:按城镇划分的师生比率
* `LSTAT`:人口状况降低
* `MEDV`:自有住房的中位数价值,以$ 1000 为单位
* `LSTAT`:人口状况降低百分比
* `MEDV`:自有住房的中位数价值,以 1000 美元为单位
在这里,我们有一个简单的程序,它将读取数据集并创建数据的详细说明:
......@@ -468,7 +468,7 @@ max 88.976200 100.000000 27.740000 1.000000 0.871000 8.780000
在此示例中,我们将使用的模型很简单,但是几乎包含了处理更复杂模型所需的所有元素。
在下图中,我们看到了整个设置的不同参与者:模型,CostFunction 和梯度。 TensorFlow 真正有用的功能是能够自动微分模型和函数。
在下图中,我们看到了整个设置的不同参与者:模型,损失函数和梯度。 TensorFlow 真正有用的功能是能够自动微分模型和函数。
![Model architecture](img/00055.jpg)
......@@ -490,7 +490,7 @@ y_model = model(X, w, b)
## 损失函数说明和优化器循环
在此示例中,我们将使用常用的均方误差,但是这次使用了多变量; 因此我们应用 reduce_mean 来收集不同维度上的误差值:
在此示例中,我们将使用常用的均方误差,但是这次使用了多变量; 因此我们应用`reduce_mean`来收集不同维度上的误差值:
```py
withtf.name_scope("CostFunction"):
......
......@@ -532,7 +532,7 @@ print("Accuracy: %f" % score)
```
输出结果可观(为了简化模型)74的准确率:
输出结果可观(为了简化模型)74% 的准确率:
```py
Accuracy: 0.740000
......
......@@ -464,7 +464,7 @@ print(accuracy.eval({x: Xt, y_: Yt}))
## 结果描述
如我们所见,随着历时的发展,我们具有可变精度,但是它总是优于 90%的精度,具有 30%的随机基数(如果我们生成 0 到 3 之间的随机数来猜测结果)。
如我们所见,随着历时的发展,我们具有可变精度,但是它总是优于 90% 的精度,具有 30% 的随机基数(如果我们生成 0 到 3 之间的随机数来猜测结果)。
```py
0.973684
......
......@@ -343,7 +343,7 @@ padding='SAME')
## 数据集说明和加载
MNIST 是易于理解和阅读但难以掌握的数据集。 当前,有很多好的算法可以解决这个问题。 在我们的案例中,我们将寻求建立一个足够好的模型,以使其与 10的随机结果相去甚远。
MNIST 是易于理解和阅读但难以掌握的数据集。 当前,有很多好的算法可以解决这个问题。 在我们的案例中,我们将寻求建立一个足够好的模型,以使其与 10% 的随机结果相去甚远。
为了访问 MNIST 数据集,我们将使用为 TensorFlow 的 MNIST 教程开发的一些实用工具类。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册