提交 3fc46574 编写于 作者: W wizardforcel

2020-08-06 22:59:20

上级 a68fa1d5
......@@ -1032,7 +1032,7 @@ from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
```
接下来,我们需要准备由波士顿住房数据集中的特征和标签组成的训练集。 `read_boston_data ()`方法从 scikit-learn 读取并分别返回特征和标签:
接下来,我们需要准备由波士顿住房数据集中的特征和标签组成的训练集。`read_boston_data ()`方法从 scikit-learn 读取并分别返回特征和标签:
```py
def read_boston_data():
......
......@@ -406,7 +406,7 @@ MLP 在 1986 年首次使用反向传播训练算法成功训练。然而,现
| ID | 属性 | 说明 |
| --- | --- | --- |
| 1 | `age` | 年龄数字。 |
| 2 | `job` | 这是类别格式的职业类型,具有可能的值:`admin``blue-collar``entrepreneur``housemaid``management``retired``self-employed``services``student` `technician``unemployed``unknown`。 |
| 2 | `job` | 这是类别格式的职业类型,具有可能的值:`admin``blue-collar``entrepreneur``housemaid``management``retired``self-employed``services``student``technician``unemployed``unknown`。 |
| 3 | `marital` | 这是类别格式的婚姻状态,具有可能的值:`divorced`(或`widowed`),`married``single``unknown`。 |
| 4 | `education` | 这是类别格式的教育背景,具有如下可能的值:`basic.4y``basic.6y``basic.9y``high.school``illiterate``professional.course``university.degree``unknown`。 |
| 五 | `default` | 这是类别格式的信用,默认情况下可能包含:`no``yes``unknown`。 |
......@@ -888,7 +888,7 @@ RBM 是无向概率图模型,称为马尔科夫随机场。它由两层组成
在等式 4 中,学习率由`eps`定义。通常,较小的`eps`值可确保训练更加密集。但是,如果您希望网络快速学习,可以将此值设置得更高。
由于同一层中的单元之间没有连接,因此很容易计算第一项。 `p(h | v)``p(v | h)`的条件分布是阶乘的,并且由以下等式中的逻辑函数给出:
由于同一层中的单元之间没有连接,因此很容易计算第一项。`p(h | v)``p(v | h)`的条件分布是阶乘的,并且由以下等式中的逻辑函数给出:
![Restricted Boltzmann Machines (RBMs)](img/B09698_03_47.jpg)
......@@ -1239,7 +1239,7 @@ F1-score: 0.8767190584424599
因为在 FFNN 中, 目标函数之一是最小化评估成本,我们必须定义一个优化器。我们已经看到了如何使用[`tf.train.AdamOptimizer`](https://www.tensorflow.org/api_docs/python/tf/train/AdamOptimizer)[`Tensorflow tf.train`](https://www.tensorflow.org/api_docs/python/tf/train)提供了一组有助于训练模型的类和函数。就个人而言,我发现 Adam 优化器在实践中对我很有效,而不必考虑学习率等等。
对于大多数情况,我们可以利用 Adam,但有时我们可以采用实现的`RMSPropOptimizer`函数,这是梯度下降的高级形式。 `RMSPropOptimizer`函数实现`RMSProp`算法。
对于大多数情况,我们可以利用 Adam,但有时我们可以采用实现的`RMSPropOptimizer`函数,这是梯度下降的高级形式。`RMSPropOptimizer`函数实现`RMSProp`算法。
`RMSPropOptimizer`函数还将学习率除以指数衰减的平方梯度平均值。衰减参数的建议设置值为`0.9`,而学习率的良好默认值为`0.001`
......@@ -1247,11 +1247,11 @@ F1-score: 0.8767190584424599
optimizer = tf.train.RMSPropOptimizer(0.001, 0.9).minimize(cost_op)
```
使用最常见的优化器 SGD,学习率必须随`1/T`缩放才能获得收敛,其中`T`是迭代次数。 `RMSProp`尝试通过调整步长来自动克服此限制,以使步长与梯度的比例相同。
使用最常见的优化器 SGD,学习率必须随`1/T`缩放才能获得收敛,其中`T`是迭代次数。`RMSProp`尝试通过调整步长来自动克服此限制,以使步长与梯度的比例相同。
因此,如果您正在训练神经网络,但计算梯度是必需的,使用`tf.train.RMSPropOptimizer()`将是在小批量设置中学习的更快方式。研究人员还建议在训练 CNN 等深层网络时使用动量优化器。
最后,如果您想通过设置这些优化器来玩游戏,您只需要更改一行。由于时间限制,我没有尝试过所有这些。然而,根据 Sebastian Ruder 最近的一篇研究论文(见[此链接](https://arxiv.org/abs/1609.04747)),自适应学习率方法的优化者,`Adagrad``Adadelta` `RMSprop``Adam`是最合适的,并为这些情况提供最佳收敛。
最后,如果您想通过设置这些优化器来玩游戏,您只需要更改一行。由于时间限制,我没有尝试过所有这些。然而,根据 Sebastian Ruder 最近的一篇研究论文(见[此链接](https://arxiv.org/abs/1609.04747)),自适应学习率方法的优化者,`Adagrad``Adadelta``RMSprop``Adam`是最合适的,并为这些情况提供最佳收敛。
### 网格搜索和随机搜索的超参数调整
......
......@@ -126,7 +126,7 @@ def init_weights(shape):
w = init_weights([3, 3, 1, 32])
```
然后输入的数量增加到`32`,这意味着第二卷积层中的每个神经元被卷积到第一卷积层的`3×3×32`个神经元。 `w2`权重如下:
然后输入的数量增加到`32`,这意味着第二卷积层中的每个神经元被卷积到第一卷积层的`3×3×32`个神经元。`w2`权重如下:
```py
w2 = init_weights([3, 3, 32, 64])
......@@ -164,7 +164,7 @@ def model(X, w, w2, w3, w4, w_o, p_keep_conv, p_keep_hidden):
```
`tf.nn.conv2d()`执行 TensorFlow 操作进行卷积。请注意,所有尺寸的`strides`都设置为 1。实际上,第一步和最后一步必须始终为 1,因为第一步是图像编号,最后一步是输入通道。 `padding`参数设置为`'SAME'`,这意味着输入图像用零填充,因此输出的大小相同:
`tf.nn.conv2d()`执行 TensorFlow 操作进行卷积。请注意,所有尺寸的`strides`都设置为 1。实际上,第一步和最后一步必须始终为 1,因为第一步是图像编号,最后一步是输入通道。`padding`参数设置为`'SAME'`,这意味着输入图像用零填充,因此输出的大小相同:
```py
conv1 = tf.nn.conv2d(X, w,strides=[1, 1, 1, 1],\
......@@ -255,7 +255,7 @@ py_x = model(X, w, w2, w3, w4, w_o, p_keep_conv, p_keep_hidden)
cost = tf.reduce_mean(Y_)
```
为了最小化评估的`cost`,我们必须定义一个优化器。在这种情况下,我们将使用`RMSPropOptimizer`,它是 GD 的高级形式。 `RMSPropOptimizer`实现了 RMSProp 算法,这是一种未发表的自适应学习率方法,由 Geoff Hinton 在他的 [Coursera 课程的第 6 讲](http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf)中提出。
为了最小化评估的`cost`,我们必须定义一个优化器。在这种情况下,我们将使用`RMSPropOptimizer`,它是 GD 的高级形式。`RMSPropOptimizer`实现了 RMSProp 算法,这是一种未发表的自适应学习率方法,由 Geoff Hinton 在他的 [Coursera 课程的第 6 讲](http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf)中提出。
### 注意
......@@ -811,7 +811,7 @@ def gram_matrix(F, N, M):
return tf.matmul(tf.transpose(Ft), Ft)
```
`style_loss`测量两个图像彼此之间的接近程度。此函数是样式图像和输入 `noise_image`生成的 Gram 矩阵元素的平方差的总和:
`style_loss`测量两个图像彼此之间的接近程度。此函数是样式图像和输入`noise_image`生成的 Gram 矩阵元素的平方差的总和:
```py
noise_image = np.random.uniform\
......@@ -1339,7 +1339,7 @@ summary_op = tf.summary.merge_all()
print ("Model Restored!")
```
接下来我们需要获得一批训练示例。 `batch_image`现在拥有一批图像,`batch_label`包含这些图像的正确标签:
接下来我们需要获得一批训练示例。`batch_image`现在拥有一批图像,`batch_label`包含这些图像的正确标签:
```py
for step in xrange(MAX_ITERATIONS):
......
......@@ -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 = {
......@@ -304,7 +304,7 @@ testlabel = mnist.test.labels
print ("MNIST LOADED")
```
让我们为输入图像定义一个占位符变量。数据类型设置为`float`,形状设置为`[None, n_input]` `None`参数表示张量可以保持任意数量的图像,每个图像的大小为`n_input`
让我们为输入图像定义一个占位符变量。数据类型设置为`float`,形状设置为`[None, n_input]``None`参数表示张量可以保持任意数量的图像,每个图像的大小为`n_input`
```py
x = tf.placeholder("float", [None, n_input])
......@@ -682,7 +682,7 @@ tf.nn.conv2d_transpose(value, filter, output_shape, strides, padding='SAME')
这种操作有时是 ,称为反卷积;它只是`conv2d`的梯度。该函数的参数如下:
* `value``float`型和形状`[batch, height, width, in_channels]`的 4D 张量。
* `filter`:与`value`和形状`[height, width, output_channels, in_channels]`具有相同类型的 4D 张量。 `in_channels`维度必须与值匹配。
* `filter`:与`value`和形状`[height, width, output_channels, in_channels]`具有相同类型的 4D 张量。`in_channels`维度必须与值匹配。
* `output_shape`:表示去卷积操作的输出形状的 1D 张量。
* `strides`:整数列表。输入张量的每个维度的滑动窗口的步幅。
* `padding`:一个有效的字符串或`SAME`
......@@ -891,9 +891,9 @@ Andrea Dal Pozzolo,Olivier Caelen,Reid A. Johnson 和 Gianluca Bontempi。
该数据集包含 2013 年 9 月欧洲信用卡持有人在两天内进行的交易。共有 285,299 笔交易,只有 492 笔欺诈,这意味着数据集非常不平衡。正类(欺诈)占所有交易的 0.172%。
数据集包含数字输入变量,这些变量是 PCA 转换的结果。遗憾的是,由于机密性问题,我们无法提供有关数据的原始特征和更多背景信息。有 28 个特征,即`V1``V2`,... `V27`,它们是使用 PCA 获得的主要成分,除了`Time``Amount`特征。 `Class`特征是响应变量,在欺诈情况下取值`1`,否则取`0`
数据集包含数字输入变量,这些变量是 PCA 转换的结果。遗憾的是,由于机密性问题,我们无法提供有关数据的原始特征和更多背景信息。有 28 个特征,即`V1``V2`,... `V27`,它们是使用 PCA 获得的主要成分,除了`Time``Amount`特征。`Class`特征是响应变量,在欺诈情况下取值`1`,否则取`0`
还有两个附加特征,`Time``Amount` `Time`列表示每笔交易与第一笔交易之间的时间(以秒为单位),而`Amount`列表示此交易中转账的金额。那么,让我们看一下输入数据(仅显示`V1``V2``V26``V27`),如图 16 所示:
还有两个附加特征,`Time``Amount``Time`列表示每笔交易与第一笔交易之间的时间(以秒为单位),而`Amount`列表示此交易中转账的金额。那么,让我们看一下输入数据(仅显示`V1``V2``V26``V27`),如图 16 所示:
![Description of the dataset](img/B09698_05_16.jpg)
......@@ -1288,7 +1288,7 @@ with tf.Session() as sess:
test_batch_mse)))
```
在此代码中,我们重用了之前制作的训练模型。 `test_batch_mse`是我们测试数据的欺诈分数:
在此代码中,我们重用了之前制作的训练模型。`test_batch_mse`是我们测试数据的欺诈分数:
```py
>>>
......
......@@ -891,7 +891,7 @@ data_lstm = Preprocessing(data_dir=data_dir,
* `stopwords_file`:可选。如果提供,它将丢弃原始数据中的每个停用词。
* `sequence_len`:可选。如果`m`是数据集中的最大序列长度,则需要`sequence_len >= m`。如果`sequence_len``None`,则会自动分配给`m`
* `n_samples`:可选。它是从数据集加载的样本数(对大型数据集很有用)。如果`n_samples``None`,则将加载整个数据集(注意;如果数据集很大,则可能需要一段时间来预处理每个样本)。
* `test_size`:可选。 `0 < test_size < 1`。它表示要包含在测试集中的数据集的比例(默认值为`0.2`)。
* `test_size`:可选。`0 < test_size < 1`。它表示要包含在测试集中的数据集的比例(默认值为`0.2`)。
* `val_samples`:可选但可用于表示验证样本的绝对数量(默认为`100`)。
* `random_state`:这是随机种子的可选参数,用于将数据分成训练,测试和验证集(默认为`0`)。
* `ensure_preprocessed`:可选。如果`ensure_preprocessed=True`,它确保数据集已经过预处理(默认为`False`)。
......@@ -1200,7 +1200,7 @@ def __cell(self, hidden_size, dropout_keep_prob, seed=None):
return dropout_cell
```
一旦我们创建了 LSTM 单元格,我们就可以创建输入标记的嵌入。为此,`__word_embeddings()`可以解决这个问题。它构建一个形状为`[vocab_size, embedding_size]`的嵌入层,输入参数如`x`,它是形状`[batch_size, max_length]`的输入。 `vocab_size`是词汇量大小,即可能出现在样本中的可能单词的数量。 `embedding_size`是将使用此大小的向量表示的单词,种子是可选的,但确保嵌入初始化的随机状态。
一旦我们创建了 LSTM 单元格,我们就可以创建输入标记的嵌入。为此,`__word_embeddings()`可以解决这个问题。它构建一个形状为`[vocab_size, embedding_size]`的嵌入层,输入参数如`x`,它是形状`[batch_size, max_length]`的输入。`vocab_size`是词汇量大小,即可能出现在样本中的可能单词的数量。`embedding_size`是将使用此大小的向量表示的单词,种子是可选的,但确保嵌入初始化的随机状态。
最后,它返回具有形状`[batch_size, max_length, embedding_size]`的嵌入查找张量:
......@@ -1743,7 +1743,7 @@ TRAIN = "train/"
TEST = "test/"
```
然后我们加载并根据由`[Array [Array [Float]]]`格式的`INPUT_SIGNAL_TYPES`数组定义的输入信号类型,映射每个`.txt`文件的数据。 `X`表示神经网络的训练和测试输入:
然后我们加载并根据由`[Array [Array [Float]]]`格式的`INPUT_SIGNAL_TYPES`数组定义的输入信号类型,映射每个`.txt`文件的数据。`X`表示神经网络的训练和测试输入:
```py
def load_X(X_signals_paths):
......
......@@ -119,7 +119,7 @@ to_ignore=[1, 6]
data = preprocess(data, to_ignore)
```
接下来,我们指定输入数据的形状。输入样本总共有`6`特征,我们将分批量样本以节省内存,因此我们的数据输入形状为`[None, 6]` `None`参数表示未知维度,因此我们可以更改批量中处理的样本总数:
接下来,我们指定输入数据的形状。输入样本总共有`6`特征,我们将分批量样本以节省内存,因此我们的数据输入形状为`[None, 6]``None`参数表示未知维度,因此我们可以更改批量中处理的样本总数:
```py
net = tfl.input_data(shape=[None, 6])
......@@ -326,7 +326,7 @@ def run_model(result):
test_images, test_labels = data_utils.mnist(training=False)
```
我们将使用梯度下降优化程序并将其应用于图。 `pt.apply_optimizer`函数增加了正则化损失并设置了一个步进计数器:
我们将使用梯度下降优化程序并将其应用于图。`pt.apply_optimizer`函数增加了正则化损失并设置了一个步进计数器:
```py
optimizer = tf.train.GradientDescentOptimizer(0.01)
......@@ -550,7 +550,7 @@ numpy.random.seed(7)
我们加载 IMDB 数据集。我们将数据集限制为前 5,000 个单词。我们还将数据集分为训练(50%)和测试(50%)集。
Keras 提供对 IMDB 数据集的内置访问。 `imdb.load_data()`函数允许您以准备好在神经网络和 DL 模型中使用的格式加载数据集。单词已被整数替换,这些整数表示数据集中每个单词的有序频率。因此,每个评论中的句子包括一系列整数。
Keras 提供对 IMDB 数据集的内置访问。`imdb.load_data()`函数允许您以准备好在神经网络和 DL 模型中使用的格式加载数据集。单词已被整数替换,这些整数表示数据集中每个单词的有序频率。因此,每个评论中的句子包括一系列整数。
这是代码:
......
......@@ -1263,7 +1263,7 @@ FM 可以使用这些特征丰富的(元)数据集。 FM 可以使用这些
为了准备这样的训练集,我们可以使用 pandas 中的`get_dummies()`方法将所有列转换为分类数据,因为 FM 模型使用表示为整数的分类数据。
我们使用两个函数`TFFMClassifier``TFFMRegressor`来进行预测(参见`items.py`)并分别计算 MSE(参见来自`tffm`库的`quantity.py`脚本(在 MIT 许可下))。 `tffm`是基于 TensorFlow 的 FM 和 pandas 实现,用于预处理和结构化数据。这个基于 TensorFlow 的实现提供了一个任意顺序(`>= 2`)分解机,它支持:
我们使用两个函数`TFFMClassifier``TFFMRegressor`来进行预测(参见`items.py`)并分别计算 MSE(参见来自`tffm`库的`quantity.py`脚本(在 MIT 许可下))。`tffm`是基于 TensorFlow 的 FM 和 pandas 实现,用于预处理和结构化数据。这个基于 TensorFlow 的实现提供了一个任意顺序(`>= 2`)分解机,它支持:
* 密集和稀疏的输入
* 不同的(基于梯度的)优化方法
......@@ -1677,7 +1677,7 @@ model.destroy()
考虑到我们使用相对较小的数据集来拟合我们的模型, 实验结果很好。正如预期的那样,如果我们可以通过项目购买和点击访问所有信息集,则更容易生成预测,但我们仍然只使用汇总类别数据获得冷启动建议的预测。
既然我们已经看到客户将在每个会话中购买,那么计算两个测试集的均方误差将会很棒。 `TFFMRegressor`方法可以帮助我们解决这个问题。为此,请使用`quantity.py`脚本。
既然我们已经看到客户将在每个会话中购买,那么计算两个测试集的均方误差将会很棒。`TFFMRegressor`方法可以帮助我们解决这个问题。为此,请使用`quantity.py`脚本。
首先,问题是如果我们只能访问类别而没有历史点击/购买数据会发生什么。让我们删除`cold_start`测试集的历史点击和购买数据:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册