提交 4b0b83d3 编写于 作者: W wizardforcel

2020-08-07 11:17:18

上级 3fc46574
......@@ -153,7 +153,7 @@ DNN 是人工神经网络,它们强烈地面向 DL。在正常分析程序不
DBN 是深度生成模型,它们是神经网络模型,可以复制您提供的数据分布。这允许您从实际数据点生成“虚假但逼真”的数据点。
DBN 由可见层和多层随机潜在变量组成,这些变量称为隐藏单元或特征检测器。前两层在它们之间具有无向的对称连接并形成关联存储器,而较低层从前一层接收自上而下的有向连接。 DBN 的构建块是受限玻尔兹曼机(RBM)。如下图所示,几个 RBM 一个接一个地堆叠形成 DBN:
DBN 由可见层和多层随机潜在变量组成,这些变量称为隐藏单元或特征检测器。前两层在它们之间具有无向的对称连接并形成关联存储器,而较低层从前一层接收自上而下的有向连接。 DBN 的构建块是受限玻尔兹曼机(RBM)。如下图所示,几个 RBM 一个接一个地堆叠形成 DBN:
![Deep Belief Networks (DBNs)](img/B09698_01_15.jpg)
......
......@@ -6,11 +6,11 @@
现在让我们看看 TensorFlow v1.6 具有的新功能和令人兴奋的功能。
## Nvidia GPU 支持优化
## Nvidia GPU 支持优化
从 TensorFlow v1.5 开始,预构建的二进制文件现在针对 CUDA 9.0 和 cuDNN 7 构建。但是,从 v1.6 版本开始,TensorFlow 预构建的二进制文件使用 AVX 指令,这可能会破坏旧 CPU 上的 TensorFlow。尽管如此,自 v1.5 以来,已经可以在 NVIDIA Tegra 设备上增加对 CUDA 的支持。
## 介绍 TensorFlow Lite
## TensorFlow Lite
TensorFlow Lite 是 TensorFlow 针对移动和嵌入式设备的轻量级解决方案。它支持具有小二进制大小和支持硬件加速的快速表现的设备上机器学习模型的低延迟推理。
......@@ -123,7 +123,7 @@ TensorFlow 实现定义控制依赖性,以强制规定执行其他独立操作
以下是 TensorFlow 图的主要组成部分:
* 变量:用于 TensorFlow 会话之间的值,包含权重和偏
* 变量:用于 TensorFlow 会话之间的值,包含权重和偏
* 张量:一组值,在节点之间传递以执行操作(也称为操作)。
* 占位符:用于在程序和 TensorFlow 图之间发送数据。
* 会话:当会话启动时,TensorFlow 会自动计算图中所有操作的梯度,并在链式规则中使用它们。实际上,在执行图时会调用会话。
......@@ -631,7 +631,7 @@ with tf.Session() as sess:
```
## 获取
## 运行
要获取操作的输出,可以通过调用会话对象上的`run()`并传入张量来执行图。除了获取单个张量节点,您还可以获取多个张量。
......@@ -964,7 +964,7 @@ with tf.name_scope("LossFunction") as scope:
loss = tf.reduce_mean(tf.square(y - y_data))
```
让我们注释 TensorBoard 所需的损失,权重和偏
让我们注释 TensorBoard 所需的损失,权重和偏
```py
loss_summary = tf.summary.scalar("loss", loss)
......
......@@ -529,7 +529,7 @@ normalized_df = pd.concat([df_temp,
normalized_df.to_csv('bank_normalized.csv', index = False)
```
### 用于客户订阅评估的 MLP 的 TensorFlow 实现
### 用于客户订阅评估的 TensorFlow 中的 MLP 实现
对于这个例子,我们将使用我们在前面的例子中正则化的银行营销数据集。有几个步骤可以遵循。首先,我们需要导入 TensorFlow,以及其他必要的包和模块:
......@@ -668,7 +668,7 @@ y = tf.placeholder(tf.float32, [None, n_classes])
dropout_keep_prob = tf.placeholder(tf.float32)
```
使用此处给出的缩放,可以将相同的网络用于训练(使用`dropout_keep_prob < 1.0`)和评估(使用`dropout_keep_prob == 1.0`)。现在,我们可以定义一个实现 MLP 分类器的方法。为此,我们将提供四个参数,如输入,权重,偏和丢弃概率,如下所示:
使用此处给出的缩放,可以将相同的网络用于训练(使用`dropout_keep_prob < 1.0`)和评估(使用`dropout_keep_prob == 1.0`)。现在,我们可以定义一个实现 MLP 分类器的方法。为此,我们将提供四个参数,如输入,权重,偏和丢弃概率,如下所示:
```py
def DeepMLPClassifier(_X, _weights, _biases, dropout_keep_prob):
......@@ -680,7 +680,7 @@ def DeepMLPClassifier(_X, _weights, _biases, dropout_keep_prob):
return out
```
上述方法的返回值是激活函数的输出。前面的方法是一个存根实现,它没有告诉任何关于权重和偏的具体内容,所以在我们开始训练之前,我们应该定义它们:
上述方法的返回值是激活函数的输出。前面的方法是一个存根实现,它没有告诉任何关于权重和偏的具体内容,所以在我们开始训练之前,我们应该定义它们:
```py
weights = {
......@@ -699,7 +699,7 @@ biases = {
}
```
现在我们可以使用真实参数(输入层,权重,偏和退出)调用前面的 MLP 实现,保持概率如下:
现在我们可以使用真实参数(输入层,权重,偏和退出)调用前面的 MLP 实现,保持概率如下:
```py
pred = DeepMLPClassifier(X, weights, biases, dropout_keep_prob)
......@@ -862,7 +862,7 @@ Session closed!
顶部两层在它们之间具有无向的对称连接并形成关联存储器,而较低层从前面的层接收自上而下的定向连接。几个 RBM 一个接一个地堆叠以形成 DBN。
### 受限玻尔兹曼机(RBMs)
### 受限玻尔兹曼机(RBMs)
RBM 是无向概率图模型,称为马尔科夫随机场。它由两层组成。第一层由可见神经元组成,第二层由隐藏神经元组成。图 14 显示了简单 RBM 的结构。可见单元接受输入,隐藏单元是非线性特征检测器。每个可见神经元都连接到所有隐藏的神经元,但同一层中的神经元之间没有内部连接:
......@@ -930,7 +930,7 @@ RBM 是无向概率图模型,称为马尔科夫随机场。它由两层组成
图 16:通过构建具有 RBM 堆栈的简单 DBN 在 DBN 中进行无监督预训练
### 监督微调
### 监督微调
在监督学习阶段(也称为监督微调)中,不是随机初始化网络权重,而是使用在预训练步骤中计算的权重来初始化它们。这样,当使用监督梯度下降时,DBN 可以避免收敛到局部最小值。
......@@ -949,7 +949,7 @@ RBM 是无向概率图模型,称为马尔科夫随机场。它由两层组成
现在我们已经有足够的理论背景来介绍如何使用几个 RBM 构建 DBN,现在是时候将我们的理论应用于实践中了。在下一节中,我们将了解如何开发用于预测分析的监督 DBN 分类器。
## 使用 TensorFlow 实现 DBN 以进行客户订阅评估
## 用于客户订阅评估的 TensorFlow 中的 DBN 实现
在银行营销数据集的前一个示例中,我们使用 MLP 观察到大约 89% 的分类准确率。我们还将原始数据集标准化,然后将其提供给 MLP。在本节中,我们将了解如何为基于 DBN 的预测模型使用相同的数据集。
......@@ -958,7 +958,7 @@ RBM 是无向概率图模型,称为马尔科夫随机场。它由两层组成
前面提到的实现是基于 RBM 的简单,干净,快速的 DBN 实现,并且基于 NumPy 和 TensorFlow 库,以便利用 GPU 计算。该库基于以下两篇研究论文实现:
* Geoffrey E. Hinton,Simon Osindero 和 Yee-Whye Teh 的深度信念网快速学习算法。 Neural Computation 18.7(2006):1527-1554。
* 训练受限制的玻尔兹曼机:简介,Asja Fischer 和 Christian Igel。模式识别 47.1(2014):25-39。
* 训练受限制的玻尔兹曼机:简介,Asja Fischer 和 Christian Igel。模式识别 47.1(2014):25-39。
我们将看到如何以无监督的方式训练 RBM,然后我们将以有监督的方式训练网络。简而言之,有几个步骤需要遵循。主分类器是`classification_demo.py`
......@@ -1227,9 +1227,9 @@ F1-score: 0.8767190584424599
然而,就像层数一样,你可以尝试逐渐增加神经元的数量,直到网络开始过拟合。
### 权重和偏初始化
### 权重和偏初始化
正如我们将在下一个示例中看到的那样,初始化权重和偏,隐藏层是一个重要的超参数,需要注意:
正如我们将在下一个示例中看到的那样,初始化权重和偏,隐藏层是一个重要的超参数,需要注意:
* 不要做所有零初始化:一个听起来合理的想法可能是将所有初始权重设置为零,但它在实践中不起作用。这是因为如果网络中的每个神经元计算相同的输出,如果它们的权重被初始化为相同,则神经元之间将不存在不对称的来源。
* 小随机数:也可以将神经元的权重初始化为小数,但不能相同为零。或者,可以使用从均匀分布中抽取的小数字。
......
......@@ -434,7 +434,7 @@ im2[:, :, 0], im2[:, :, 2] = im2[:, :, 2], im2[:, :, 0]
图 10:要分类的图像
的权重和偏由以下语句加载:
的权重和偏由以下语句加载:
```py
net_data = load(open("bvlc_alexnet.npy", "rb"), encoding="latin1").item()
......@@ -480,7 +480,7 @@ kuvasz 0.0848062
以下部分中描述的以下微调实现在`alexnet_finetune.py`中实现,可以在本书的代码库中下载。
# 微调实现
# 微调实现
我们的分类任务包含两个类别,因此网络的新 softmax 层将包含 2 个类别而不是 1,000 个类别。这是输入张量,它是一个`227×227×3`图像,以及等级 2 的输出张量:
......@@ -507,7 +507,7 @@ fc8 = tf.nn.xw_plus_b(fc7, fc8W, fc8b)
prob = tf.nn.softmax(fc8)
```
损失是用于分类的表现指标。它是一个始终为正的连续函数,如果模型的预测输出与期望的输出完全匹配,则交叉熵等于零。因此,优化的目标是通过改变模型的权重和偏来最小化交叉熵,因此它尽可能接近零。
损失是用于分类的表现指标。它是一个始终为正的连续函数,如果模型的预测输出与期望的输出完全匹配,则交叉熵等于零。因此,优化的目标是通过改变模型的权重和偏来最小化交叉熵,因此它尽可能接近零。
TensorFlow 具有用于计算交叉熵的内置函数。为了使用交叉熵来优化模型的变量,我们需要一个标量值,因此我们只需要对所有图像分类采用交叉熵的平均值:
......@@ -956,7 +956,7 @@ grocery store, grocery, food market, market (score = 0.00264)
听起来不错!
# 使用 CNN 进行情感识别
# CNN 的情感识别
深度学习中难以解决的一个问题与神经网络无关:它是以正确格式获取正确数据。但是,[Kaggle 平台](https://www.kaggle.com/)提供了新的问题,并且需要研究新的数据集。
......@@ -1160,7 +1160,7 @@ def add_to_regularization_loss(W, b):
有关详细信息,请参阅[此链接](http://www.kdnuggets.com/2015/04/preventing-overfitting-neural-networks.html/2)
我们已经构建了网络的权重和偏以及优化过程。但是,与所有已实现的网络一样,我们必须通过导入所有必需的库来启动实现:
我们已经构建了网络的权重和偏以及优化过程。但是,与所有已实现的网络一样,我们必须通过导入所有必需的库来启动实现:
```py
import tensorflow as tf
......
......@@ -50,7 +50,7 @@ n_hidden_2 = 128
X = tf.placeholder("float", [None, n_input])
```
然后我们可以定义网络的权重和偏`weights`数据结构包含编码器和解码器的权重定义。请注意,使用`tf.random_normal`选择权重,它返回具有正态分布的随机值:
然后我们可以定义网络的权重和偏`weights`数据结构包含编码器和解码器的权重定义。请注意,使用`tf.random_normal`选择权重,它返回具有正态分布的随机值:
```py
weights = {
......@@ -625,7 +625,7 @@ biases = {
}
```
以下函数`cae`构建卷积自编码器:传递的输入是图像,`_X`;数据结构权重和偏`_W``_b`;和`_keepprob`参数:
以下函数`cae`构建卷积自编码器:传递的输入是图像,`_X`;数据结构权重和偏`_W``_b`;和`_keepprob`参数:
```py
def cae(_X, _W, _b, _keepprob):
......@@ -875,7 +875,7 @@ Start training..
到目前为止,我们已经看到了自编码器的不同实现以及改进版本。但是,将此技术应用于 MNIST 数据集并不能说明其真正的力量。因此,现在是时候看到一个更现实的问题,我们可以应用自编码器技术。
# 使用自编码器进行欺诈分析
# 自编码器和欺诈分析
银行,保险公司和信用合作社等金融公司的欺诈检测和预防是一项重要任务。到目前为止,我们已经看到如何以及在何处使用深度神经网络(DNN) 和卷积神经网络(CNN)。
......@@ -1072,7 +1072,7 @@ for c in range(train_x.shape[1]):
test_x[:, c] = (test_x[:, c] - cols_mean[-1]) / cols_std[-1]
```
## 自编码器作为无监督特征学习算法
## 作为无监督特征学习算法的自编码器
在本小节中,我们将看到如何使用自编码器作为无监督的特征学习算法。首先,让我们初始化网络超参数:
......@@ -1128,7 +1128,7 @@ def decoder(x):
return layer_1
```
之后,我们通过传递输入数据的 TensorFlow 占位符来构建模型。权重和偏(NN 的`W``b`)包含我们将学习优化的网络的所有参数,如下所示:
之后,我们通过传递输入数据的 TensorFlow 占位符来构建模型。权重和偏(NN 的`W``b`)包含我们将学习优化的网络的所有参数,如下所示:
```py
encoder_op = encoder(X)
......
......@@ -326,14 +326,14 @@ output = tf.transpose(output, [1, 0, 2])
last = tf.gather(output, int(output.get_shape()[0]) - 1)
```
接下来,我们定义 RNN 的权重和偏
接下来,我们定义 RNN 的权重和偏
```py
weight = bias = tf.get_variable("weight", shape=[rnn_size, 2], dtype=tf.float32, initializer=None, regularizer=None, trainable=True, collections=None)
bias = tf.get_variable("bias", shape=[2], dtype=tf.float32, initializer=None, regularizer=None, trainable=True, collections=None)
```
然后定义`logits`输出。它使用前面代码中的权重和偏
然后定义`logits`输出。它使用前面代码中的权重和偏
```py
logits_out = tf.nn.softmax(tf.matmul(last, weight) + bias)
......@@ -1488,7 +1488,7 @@ plt.show()
如果我们检查前面的绘图,很明显训练阶段和验证阶段的训练都很顺利,只有 1000 步。然而,读者应加大训练步骤,调整超参数,看看它是如何去。
## 通过 TensorBoard 进行可视化
## 通过 TensorBoard 可视化
现在让我们观察 TensorBoard 上的 TensorFlow 计算图。只需执行以下命令并在`localhost:6006/`访问 TensorBoard:
......@@ -1641,7 +1641,7 @@ Real sentiment: [1\. 0.]
在下一节中,我们将看到如何使用 LSTM 开发更高级的 ML 项目,这被称为使用智能手机数据集的人类活动识别。简而言之,我们的 ML 模型将能够将人类运动分为六类:走路,走楼上,走楼下,坐,站立和铺设。
# 使用 LSTM 模型识别人类活动
# LSTM 模型和人类活动识别
人类活动识别(HAR)数据库是通过对携带带有嵌入式惯性传感器的腰部智能手机的 30 名参加日常生活活动(ADL)的参与者进行测量而建立的。目标是将他们的活动分类为前面提到的六个类别之一。
......@@ -1671,7 +1671,7 @@ Real sentiment: [1\. 0.]
因此,我们知道需要解决的问题。现在是探索技术和相关挑战的时候了。
## HAR 的 LSTM 模型的工作流程
## 用于 HAR 的 LSTM 模型的工作流程
整个算法有以下工作流程:
......
......@@ -44,7 +44,7 @@ pip install — upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tens
当将操作分配给 GPU 设备时, 执行流程给予优先级。
## 使用 GPU
## GPU 使用
要在 TensorFlow 程序中使用 GPU,只需键入以下内容:
......@@ -365,7 +365,7 @@ DL 模型必须接受大量数据的训练,以提高其表现。但是,训
* 同步训练:所有工作器同时读取参数,计算训练操作,并等待所有其他人完成。然后将梯度平均,并将单个更新发送到参数服务器。因此,在任何时间点,工作器都将意识到图参数的相同值。
* 异步训练:工作器将异步读取参数服务器,计算训练操作,并发送异步更新。在任何时间点,两个不同的工作器可能会意识到图参数的不同值。
# 分布式 TensorFlow
# 分布式 TensorFlow
在本节中,我们将探索 TensorFlow 中的计算可以分布的机制。运行分布式 TensorFlow 的第一步是使用`tf.train.ClusterSpec`指定集群的架构:
......
# 九、使用协同过滤的电影推荐
# 九、协同过滤和电影推荐
在这一部分,我们将看到如何利用协同过滤来开发推荐引擎。然而,在此之前让我们讨论偏好的效用矩阵。
......@@ -704,7 +704,7 @@ plt.show()
该图表明,随着时间的推移,训练和验证误差都会减少,这意味着我们正朝着正确的方向行走。尽管如此,您仍然可以尝试增加步骤,看看这两个值是否可以进一步降低,这意味着更高的准确率。
### 推断已保存的模型
### 使用已保存的模型执行推断
以下代码使用保存的模型执行模型推理,并打印整体验证误差:
......@@ -917,7 +917,7 @@ def bucket_mean(data, bucket_ids, num_buckets):
做得好。我们将评估我们的模型并在评估步骤中绘制簇。
### 用户预测的电影评级
### 预测用户的电影评级
为此,我编写了一个名为`prediction()`的函数。它采用有关用户和项目(在本例中为电影)的示例输入,并按名称从图创建 TensorFlow 占位符。然后它评估这些张量。在以下代码中,需要注意的是 TensorFlow 假定检查点目录已存在,因此请确保它已存在。有关此步骤的详细信息,请参阅`run.py`文件。请注意,此脚本不显示任何结果,但在`main.py`脚本中进一步调用此脚本中名为`prediction`的函数进行预测:
......@@ -1194,7 +1194,7 @@ print(main.top_k_movies(1198,ratings_df,10))
这些论文解释了如何将现有数据转换为特征丰富的数据集,以及如何在数据集上实现 FM。因此,研究人员正在尝试使用 FM 来开发更准确和更强大的 RE。在下一节中,我们将看到一些使用 FM 和一些变体的示例。
# 推荐系统的分解机
# 分解机和推荐系统
在本节中,我们将看到两个使用 FM 开发更强大的推荐系统的示例 。我们将首先简要介绍 FM 及其在冷启动推荐问题中的应用。
......@@ -1779,7 +1779,7 @@ Xiangnan He 和 Jun Xiao 等。为了克服这一局限,我们提出了一些
有关此文件格式的更多信息,请参阅[此链接](http://www.libfm.org/)
### 使用 NFM 进行电影推荐
### NFM 和电影推荐
我们使用 TensorFlow 并复用来自这个 [GitHub](https://github.com/hexiangnan/neural_factorization_machine) 的扩展 NFM 实现。这是 FM 的深度版本,与常规 FM 相比更具表现力。仓库有三个文件,即`NeuralFM.py``FM.py``LoadData.py`
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册