提交 d8643599 编写于 作者: W wizardforcel

2020-12-26 17:31:32

上级 cda0b838
......@@ -159,7 +159,7 @@
该翻译主要包括三个部分:
* **丰富度**:并非源语言中的所有单词在目标语言中都有对应的单词。 例如,英语句子`Santanu loves math`法语翻译为`Santanu aim les maths`。 如我们所见,英语中的`math`一词已翻译成法文的两个单词,即`les maths`。 形式上,*丰富度*定义为目标语言中源语言单词生成的单词数量上的概率分布,并且可以表示为`P(n / w[s])`,其中`w[s]`代表源词。 而不是使用硬编码的数字`n`,而是使用概率分布,因为相同的单词可能会根据上下文生成不同长度的翻译。
* **失真**:对于任何机器翻译系统,源句子和目标句子之间的单词到单词的对应关系都很重要。 但是,源语言句子中单词的位置可能并不总是与目标语言句子中对应单词的位置完全同步。 失真通过概率函数 `P(p[t], p[s], l)`覆盖了对齐的概念,其中`p[t]``p[t]`分别代表目标词和源词的位置,而`l`代表目标句子的长度。 如果源语言是英语,目标语言是法语,则`P(p[t] / p[s], l)`表示英语单词在 位置`p[s]`对应于位置`p[s]`中的法语单词,其长度为`l`
* **失真**:对于任何机器翻译系统,源句子和目标句子之间的单词到单词的对应关系都很重要。 但是,源语言句子中单词的位置可能并不总是与目标语言句子中对应单词的位置完全同步。 失真通过概率函数 `P(p[t], p[s], l)`覆盖了对齐的概念,其中`p[t]``p[t]`分别代表目标词和源词的位置,而`l`代表目标句子的长度。 如果源语言是英语,目标语言是法语,则`P(p[t] / p[s], l)`表示位置`p[s]`的英语单词对应于位置`p[s]`中的法语单词,其长度为`l`
* **单词到单词的翻译**:最后,我们来进行单词到单词的翻译,这通常由给定源语言单词的目标语言单词的概率分布表示。 对于给定的源语言单词`w[s]`,概率可以表示为`P(w[t] / w[s])`,其中`w[t]`代表目标语言单词。
对于语言模型,需要在训练过程中估计生育率,失真率和单词到单词的翻译率。
......@@ -177,13 +177,15 @@
由于这是一个概率模型,因此该算法将尝试使用具有不同对齐方式的不同英语句子,在给定法语句子的情况下,其中具有正确对齐方式的正确英语句子应该具有最高的概率。
让我们将第一个英语单词考虑为`e[1]`-它与法语单词`f[6]`对齐,并且还会发出一个法语 这个词,如下:
让我们将第一个英语单词考虑为`e[1]`-它与法语单词`f[6]`对齐,并且还会产生一个法语单词,如下:
![](img/688b2388-8434-4d98-8d00-66ea374148b9.png)
现在,让我们将对齐方式作为两个成分的组合:失真`a[d]`和丰富度`f[d]``(1)`中的表达式可以重写如下:
![](img/edaf41f6-4172-4397-b791-f714571e57ca.png) ![](img/546bd7e5-37e3-44ba-a006-3378e4664053.png)
![](img/edaf41f6-4172-4397-b791-f714571e57ca.png)
![](img/546bd7e5-37e3-44ba-a006-3378e4664053.png)
如果我们仔细观察, `P(f[5] / e[1])`就是翻译概率, `P(a[f] / e[1])`是丰富度,而 `P(a[d] / e[1], f[5])`是失真概率。 我们需要针对英语句子中与给定法语句子的所有比对中的所有给定英语单词进行此活动,以计算`P(F, a / E)`。 最后,我们需要采用最佳英语句子`E_hat`和对齐方式`a_hat`,以使`P(F, a / E)P(E)`的概率最大化。 如下所示:
......@@ -206,7 +208,7 @@ NMT 与其他传统方法相比的一些优点如下:
下图说明了一种神经翻译机的架构,该结构使用一个 LSTM 作为编码器,将输入源语言序列编码为最终隐藏状态`h[f]`和最终存储单元状态`c[f]`。 最终的隐藏状态和单元状态`[h[f]; c[f]]`将捕获整个输入序列的上下文。 因此,`[h[f]; c[f]]`成为解码器网络可适应的良好候选者。
此隐藏状态和单元状态信息`[h[f]; c[f]]`作为初始隐藏状态和单元状态被馈送到解码器网络,然后解码器 在目标序列上训练序列,其中输入目标序列相对于输出目标序列滞后一。 根据解码器,输入序列的第一个字是伪字`[START]`,而输出标签是字`c'est`。 解码器网络仅被训练为一种生成语言模型,在任何时候,输出标签`t`都是相对于输入的下一个单词,即`y[t] = x[t + 1]`。 唯一的新变化是编码器的最终隐藏状态和单元状态(即`[h[f]; c[f]]`) 解码器的隐藏状态和单元状态为翻译提供内容。
此隐藏状态和单元状态信息`[h[f]; c[f]]`作为初始隐藏状态和单元状态被馈送到解码器网络,然后解码器在目标序列上训练,其中输入目标序列相对于输出目标序列滞后一。 根据解码器,输入序列的第一个字是伪字`[START]`,而输出标签是字`c'est`。 解码器网络仅被训练为一种生成语言模型,在任何时候,输出标签`t`都是相对于输入的下一个单词,即`y[t] = x[t + 1]`。 唯一的新变化是编码器的最终隐藏状态和单元状态(即`[h[f]; c[f]]`) 解码器的隐藏状态和单元状态为翻译提供内容。
这意味着可以将训练过程视为为目标语言(由解码器表示)建立语言模型,该模型以代表源语言的编码器的隐藏状态为条件:
......@@ -214,7 +216,7 @@ NMT 与其他传统方法相比的一些优点如下:
图 3.3:神经机器翻译系统的高级编码器-解码器架构
如果`T`是与源语言文本`S`相对应的目标语言文本,那么为了进行训练,我们只是试图使`P[w](T[s+1] / S, T)`的对数概率相对于`W`最大化,其中`T[s+1]`表示目标语言文本已转换 只需一个时间步长`W`表示编码器-解码器架构模型参数。
如果`T`是与源语言文本`S`相对应的目标语言文本,那么为了进行训练,我们只是试图使`P[w](T[s+1] / S, T)`的对数概率相对于`W`最大化,其中`T[s+1]`表示平移一个时间步骤的目标语言文本`W`表示编码器-解码器架构模型参数。
现在我们已经讨论了编码器-解码器 NMT 的训练过程,现在我们将研究如何在推理过程中使用训练后的模型。
......@@ -416,7 +418,7 @@ NMT 与其他传统方法相比的一些优点如下:
# 定义神经机器翻译的模型
如前所述,编码器将通过 LSTM 处理源输入序列,并将源文本编码为有意义的摘要。 有意义的摘要将存储在最后的序列步骤中,即隐藏和单元状态`h[f]``c[f]`。 这些向量在一起(即`[h[f]; c[f]]`)提供了有关源文本的有意义上下文,并且训练了解码器以产生其 具有隐藏和细胞状态向量的目标序列`[h[f]; c[f]]`
如前所述,编码器将通过 LSTM 处理源输入序列,并将源文本编码为有意义的摘要。 有意义的摘要将存储在最后的序列步骤中,即隐藏和单元状态`h[f]``c[f]`。 这些向量在一起(即`[h[f]; c[f]]`)提供了有关源文本的有意义上下文,并且训练了解码器来产生具有隐藏和细胞状态向量的目标序列`[h[f]; c[f]]`
下图所示“图 3.5”是英语到法语翻译的训练过程的详细图。 英文句子`It's a beautiful day`通过 LSTM 转换为含义摘要,然后存储在隐藏和单元格状态向量`[h[f]; c[f]]`中。 然后使解码器根据嵌入在`[h[f]; c[f]]`中的信息,以输入源语句为条件,生成自己的目标序列。 给定源句,使在时间步`t`的解码器预测下一个目标单词,即在时间步`t + 1`的单词。 这就是为什么目标输入字和目标输出字之间有一个时间步长的滞后的原因。 对于第一步,解码器在目标文本序列中没有任何先前的单词,因此可用于预测目标单词的唯一信息是以`[h[f]; c[f]]`,作为初始隐藏和单元状态向量提供。 像编码器一样,解码器也使用 LSTM,并且如上所述,输出目标序列比输入目标序列提前一个时间步长:
......@@ -593,7 +595,7 @@ def model_enc_dec(self):
解码器一次将运行一个时间步。 在第一种情况下,它将从编码器获取隐藏状态和单元状态,并根据伪单词`[START]`猜测翻译的第一个单词。 第一步中预测的单词,连同生成的隐藏状态和单元状态一起,再次馈送到解码器以预测第二个单词,然后继续进行处理,直到预测出由虚拟单词`[END]`表示的句子结尾。
现在,我们已经定义了将源句子/文本翻译成目标语言对应物所需的所有功能,我们将它们组合起来以构建一个函数,该函数会在给定源语言输入序列或 句子:
现在,我们已经定义了将源句子/文本翻译成目标语言对应物所需的所有功能,我们将它们组合起来以构建一个函数,该函数会生成翻译后的句子,给定源语言输入序列或句子:
```py
def decode_sequence(self,input_seq,encoder_model,decoder_model):
......@@ -704,11 +706,11 @@ python MachineTranslation.py --path '/home/santanu/ML_DS_Catalog/Machine Transla
图 3.7:GloVe 嵌入的相似性和类比说明
在上一张图中,我们绘制了**男人****女人****国王****女王**的 GloVe 词向量嵌入的二维 TSNE 视图 。 我们可以看到,**男人****女人**具有内在的相似性,**国王****女王**的情况也是如此。 此外,我们看到**国王****男人**之间的向量差异与**女王****女人**的向量差异几乎相同,这可能代表 版税的一些概念。 如我们所见,除了表达单词之间的相似性之外,还可以通过单词向量嵌入来表示类似*男人:国王:女人:女王*之类的东西。 在下一节中,我们将讨论使用 RNN 中的嵌入层将输入单词表示为单词矢量嵌入,而不是单编码的矢量。
在上一张图中,我们绘制了**男人****女人****国王****女王**的 GloVe 词向量嵌入的二维 TSNE 视图 。 我们可以看到,**男人****女人**具有内在的相似性,**国王****女王**的情况也是如此。 此外,我们看到**国王****男人**之间的向量差异与**女王****女人**的向量差异几乎相同,这可能代表王权的一些概念。 如我们所见,除了表达单词之间的相似性之外,还可以通过单词向量嵌入来表示类似*男人:国王:女人:女王*之类的东西。 在下一节中,我们将讨论使用 RNN 中的嵌入层将输入单词表示为单词矢量嵌入,而不是单编码的矢量。
# 嵌入层
嵌入层将输入单词的索引作为输入,并提供单词的单词向量嵌入作为输出。 嵌入层的尺寸为`R^(dxV)`,其中`d`是词向量嵌入的尺寸,`V`尺寸 的词汇。 嵌入层可以根据问题了解嵌入本身,也可以提供预训练的嵌入层。 在我们的案例中,我们将让神经机器翻译找出对于源语言和目标语言而言,嵌入向量应该是什么,以实现良好的翻译。 结果,我们定义的每个函数都应更改以适应嵌入层。
嵌入层将输入单词的索引作为输入,并提供单词的单词向量嵌入作为输出。 嵌入层的尺寸为`R^(dxV)`,其中`d`是词向量嵌入的尺寸,`V`词汇的尺寸。 嵌入层可以根据问题了解嵌入本身,也可以提供预训练的嵌入层。 在我们的案例中,我们将让神经机器翻译找出对于源语言和目标语言而言,嵌入向量应该是什么,以实现良好的翻译。 结果,我们定义的每个函数都应更改以适应嵌入层。
# 实施基于嵌入的 NMT
......
......@@ -33,11 +33,11 @@
![](img/b12bb426-7c2a-4116-be5b-98a133536497.png)
但是实际上,生成器函数`G[AB]``G[BA]`不可能彼此相反,因此 我们尝试通过选择 L1 或 L2 归一化的损失来尽量减少重建图像和原始图像之间的损失。 L1 规范损耗基本上是每个数据点的绝对误差之和,而 L2 规范损耗表示每个数据点的平方误差的和。 我们可以如下表示单个图像的 L2 范数损失:
但是实际上,生成器函数`G[AB]``G[BA]`不可能彼此相反,因此我们尝试通过选择 L1 或 L2 归一化的损失来尽量减少重建图像和原始图像之间的损失。 L1 规范损耗基本上是每个数据点的绝对误差之和,而 L2 规范损耗表示每个数据点的平方误差的和。 我们可以如下表示单个图像的 L2 范数损失:
![](img/09ada4ef-4d12-45db-a6b8-19064db767e9.png)
仅使前面的损失最小化是不够的。 我们必须确保在域`B`中创建的图像`x[B]`看起来逼真。例如,如果我们将域`A`中的衣服映射到域`B`中的鞋子,我们将 确保`x[B]`类似于鞋子。 如果图像不够真实,则在域`B`侧的鉴别符`D[B]`将检测为`x[B]`为假。 鞋子,因此也要考虑与此有关的损失。 通常,在训练过程中,向鉴别器提供生成的域`B`图像`x[AB] = G[AB](X[A])`,我们选择在这里用`y[B]`表示,以便它学习从假图像中对真实图像进行分类。 您可能还记得,在 GAN 中,生成器和判别器相互进行*零和最小最大值游戏*,以便不断变得更好,直到达到平衡为止。 如果伪造的图像看起来不够逼真,则鉴别器将对其进行惩罚,这意味着生成器必须学习产生更好的图像`x[AB]`,如果输入图像`x[A]`。 考虑到所有这些因素,我们可以将我们希望最小化的生成器损耗公式化为重建损耗,以及鉴别器将`x[AB]`识别为假冒的损耗。 第二种损失将试图使生成器在域`B`中生成逼真的图像。将域`A`中的图像`x[A]`映射到域`B`中的图像的生成器损失可以表示为 如下:
仅使前面的损失最小化是不够的。 我们必须确保在域`B`中创建的图像`x[B]`看起来逼真。例如,如果我们将域`A`中的衣服映射到域`B`中的鞋子,我们将确保`x[B]`类似于鞋子。 如果图像不够真实,则在域`B`侧的鉴别符`D[B]`将检测为`x[B]`为假。 鞋子,因此也要考虑与此有关的损失。 通常,在训练过程中,向鉴别器提供生成的域`B`图像`x[AB] = G[AB](X[A])`,我们选择在这里用`y[B]`表示,以便它学习从假图像中对真实图像进行分类。 您可能还记得,在 GAN 中,生成器和判别器相互进行*零和最小最大值游戏*,以便不断变得更好,直到达到平衡为止。 如果伪造的图像看起来不够逼真,则鉴别器将对其进行惩罚,这意味着生成器必须学习产生更好的图像`x[AB]`,如果输入图像`x[A]`。 考虑到所有这些因素,我们可以将我们希望最小化的生成器损耗公式化为重建损耗,以及鉴别器将`x[AB]`识别为假冒的损耗。 第二种损失将试图使生成器在域`B`中生成逼真的图像。将域`A`中的图像`x[A]`映射到域`B`中的图像的生成器损失可以表示如下:
![](img/f2cdd9c3-d4d4-4c89-a533-e5044ea37592.png)
......@@ -89,7 +89,7 @@ L2 范数下的重建损失可以表示为:
# 学习从草绘的轮廓生成天然手袋
在本章中,我们将使用草绘的轮廓生成手袋,而无需使用 DiscoGAN 进行显式配对。 我们将草图图像表示为属于域`A`,而将自然手袋图像表示为属于域`B`。将有两种生成器:一种生成器,用于获取域`A`的图像并将其映射到在域`B`下看起来逼真的图像,以及 另一个与此相反:将域`B`中的手袋图像映射到在域`A`下看起来很逼真的图像。鉴别者将尝试从每个域中真实图像的生成器中识别生成器生成的虚假图像。 生成器和判别器将相互进行 minimax 零和游戏。
在本章中,我们将使用草绘的轮廓生成手袋,而无需使用 DiscoGAN 进行显式配对。 我们将草图图像表示为属于域`A`,而将自然手袋图像表示为属于域`B`。将有两种生成器:一种生成器,用于获取域`A`的图像并将其映射到在域`B`下看起来逼真的图像,以及另一个与此相反:将域`B`中的手袋图像映射到在域`A`下看起来很逼真的图像。鉴别者将尝试从每个域中真实图像的生成器中识别生成器生成的虚假图像。 生成器和判别器将相互进行 minimax 零和游戏。
要训​​练该网络,我们将需要两套图像,手袋的草图或轮廓以及手袋的自然图像。 [可以从以下链接下载图像](https://people.eecs.berkeley.edu/~tinghuiz/projects/pix2pix/datasets/edges2handbags.tar.gz)
......@@ -476,8 +476,8 @@ def build_network(self):
| `self.D_B_loss_fake` | 在对域`B`中的伪造图像进行分类时,鉴别符`D[B]`的二进制交叉熵损失。(相对于判别器`D[B]`的参数,该损失应最小化) |
| `self.D_A_loss_real` | 在对域`A`中的真实图像进行分类时,鉴别符`D[A]`的二进制交叉熵损失。(相对于判别器`D[A]`的参数,该损失应最小化) |
| `self.D_A_loss_fake` | 在对域`A`中的伪造图像进行分类时,鉴别符`D[A]`的二进制交叉熵损失。(相对于判别器`D[A]`的参数,该损失应最小化) |
| `self.loss_GABA` | 通过两个生成器`G[AB]``G[BA]`将域`A`中的图像映射到`B`,然后再映射回`A`的重建损失 )加上假图片`G[AB](x[A])`的二进制交叉熵,并由域`B`中的鉴别器标记为真实图像。(相对于生成器`G[AB]``G[BA]`的参数,该损失应最小化) |
| `self.loss_GBAB` | 通过两个生成器`G[BA]``G[AB]`将域`B`中的图像映射到`A`,然后再映射回`B`的重建损失 加上伪图片`G[BA](x[B])`的二元交叉熵,由域`A`中的鉴别器标记为真实图像。(相对于生成器`G[AB]``G[BA]`的参数,该损失应最小化) |
| `self.loss_GABA` | 通过两个生成器`G[AB]``G[BA]`将域`A`中的图像映射到`B`,然后再映射回`A`的重建损失,加上假图片`G[AB](x[A])`的二进制交叉熵,由域`B`中的鉴别器标记为真实图像。(相对于生成器`G[AB]``G[BA]`的参数,该损失应最小化) |
| `self.loss_GBAB` | 通过两个生成器`G[BA]``G[AB]`将域`B`中的图像映射到`A`,然后再映射回`B`的重建损失加上伪图片`G[BA](x[B])`的二元交叉熵,由域`A`中的鉴别器标记为真实图像。(相对于生成器`G[AB]``G[BA]`的参数,该损失应最小化) |
前四个损耗组成了鉴别器损耗,需要根据鉴别器的参数将其最小化。 ]。 最后两个损耗组成了生成器损耗,需要根据生成器的参数将其最小化。 。
......@@ -579,7 +579,7 @@ def sample_model(self, sample_dir, epoch, id_):
'./{}/B_{:02d}_{:04d}.jpg'.format(sample_dir, epoch, id_))
```
在此`sample_model`函数中,从域`A`随机选择的图像被拍摄并馈送到生成器`G[AB]`,以在域`B`中生成图像。类似地,从域`B`随机选择的图像是 馈送到生成器`G[BA]`中,以在域`A`中生成图像。这些输出图像由两个生成器在不同时期生成,并将批次保存在样本文件夹中以查看是否 生成器在训练过程中随着时间的推移而不断改进,以产生更好的图像质量。
在此`sample_model`函数中,从域`A`随机选择的图像被拍摄并馈送到生成器`G[AB]`,以在域`B`中生成图像。类似地,从域`B`随机选择的图像馈送到生成器`G[BA]`中,以在域`A`中生成图像。这些输出图像由两个生成器在不同时期生成,并将批次保存在样本文件夹中,来查看生成器在训练过程中是否随着时间的推移而不断改进,以产生更好的图像质量。
使用 TensorFlow 保存器功能保存模型的`save_model`函数如下所示:
......
......@@ -37,7 +37,7 @@
图 5.1:使用预训练的神经网络提取视频图像特征
从上图可以看出,从视频中顺序采样的图像经过预训练的卷积神经网络,并且最后一个全连接层中的`4,096`单元的激活为 输出。 如果将`t`时的视频图像表示为`x[t]`,并且最后一个全连接层的输出表示为`f[t] ∈ R^4096`,然后`f[t] = f[w](x[t])`。 此处,`W`表示直到最后一个全连接层的卷积神经网络的权重。
从上图可以看出,从视频中顺序采样的图像经过预训练的卷积神经网络,并且输出最后一个全连接层中的`4,096`单元的激活。 如果将`t`时的视频图像表示为`x[t]`,并且最后一个全连接层的输出表示为`f[t] ∈ R^4096`,然后`f[t] = f[w](x[t])`。 此处,`W`表示直到最后一个全连接层的卷积神经网络的权重。
这些系列的输出功能`f[1], f[2], ..., f[t], ..., f[n]`可以作为循环神经网络的输入,该神经网络学习根据输入特征生成文本标题,如下图所示(“图 5.2”):
......@@ -474,7 +474,7 @@ unk => A substitute for a word that is not included in the vocabulary
在本节中,我们将所有部分放在一起以构建用于训练视频字幕模型的功能。
首先,我们结合培训和测试数据集中的视频字幕,创建单词词汇词典。 完成此操作后,我们将结合两个 LSTM 调用`build_model`函数来创建视频字幕网络。 对于每个带有特定*开始**结束*的视频,都有多个输出视频字幕。 在每个批次中,从开始和结束的特定视频的输出视频字幕是从多个可用的视频字幕中随机选择的。 调整 LSTM 2 的输入文本标题,使其在时间步`N + 1`处的起始词为`<bos>`,而输出文本标题的结束词被调整为具有最后的词 文本标签为`<eos>`。 每个时间步长上的分类交叉熵损失之和被视为特定视频的总交叉熵损失。 在每个时间步中,我们计算完整单词词汇上的分类交叉熵损失,可以表示为:
首先,我们结合培训和测试数据集中的视频字幕,创建单词词汇词典。 完成此操作后,我们将结合两个 LSTM 调用`build_model`函数来创建视频字幕网络。 对于每个带有特定*开始**结束*的视频,都有多个输出视频字幕。 在每个批次中,从开始和结束的特定视频的输出视频字幕是从多个可用的视频字幕中随机选择的。 调整 LSTM 2 的输入文本标题,使其在时间步`N + 1`处的起始词为`<bos>`,而输出文本标题的结束词被调整为最终文本标签`<eos>`。 每个时间步长上的分类交叉熵损失之和被视为特定视频的总交叉熵损失。 在每个时间步中,我们计算完整单词词汇上的分类交叉熵损失,可以表示为:
![](img/21a19e2b-fef3-4156-b1b2-8812e5a6b329.png)
......@@ -854,7 +854,7 @@ python Video_seq2seq.py process_main --path_prj '/media/santanu/9eb9b6dc-b380-48
从前面的屏幕截图中,我们可以看到训练后的模型为提供的测试视频提供了很好的字幕,表现出色。
该项目的代码可以在 [GitHub](https://github.com/PacktPublishing/Python-Artificial-Intelligence-Projects/tree/master/Chapter05) 中找到。 `VideoCaptioningPreProcessing.py`模块可用于预处理视频并创建卷积神经网络功能,而`Video_seq2seq.py`模块可用于训练端到端视频字幕系统和 运行推断。
该项目的代码可以在 [GitHub](https://github.com/PacktPublishing/Python-Artificial-Intelligence-Projects/tree/master/Chapter05) 中找到。 `VideoCaptioningPreProcessing.py`模块可用于预处理视频并创建卷积神经网络功能,而`Video_seq2seq.py`模块可用于训练端到端视频字幕系统和运行推断。
# 概要
......
......@@ -46,7 +46,7 @@
图 6.3:基于潜在因子的过滤图
上图(“图 6.3”)中说明了一种基于潜在因子的推荐方法,其中评级矩阵`R[mxn]`已分解为用户产品 配置文件矩阵`U[mxk]`和项目配置文件矩阵`P[nxk]`的转置,其中`k`模型的潜在因素。 基于这些配置文件,我们可以通过计算用户配置文件和项目配置文件的内部产品来推荐用户迄今为止尚未购买的项目。 内部产品给出了用户购买该产品时可能给出的暂定评分。
上图(“图 6.3”)中说明了一种基于潜在因子的推荐方法,其中评级矩阵`R[mxn]`已分解为用户配置文件矩阵`U[mxk]`和项目配置文件矩阵`P[nxk]`的转置的乘积,其中`k`模型的潜在因素。 基于这些配置文件,我们可以通过计算用户配置文件和项目配置文件的内部产品来推荐用户迄今为止尚未购买的项目。 内部产品给出了用户购买该产品时可能给出的暂定评分。
创建这些用户和商品资料的一种方法是,在以某种形式的平均值填充缺失值之后,对评分矩阵执行**奇异值分解****SVD**) 用户和项目(视情况而定)。 根据 SVD,评级矩阵`R`可以分解如下:
......
......@@ -2,7 +2,7 @@
在过去的几年中,增强学习已经真正兴起,在增强学习中,代理通过与环境的交互来学习决策。 这是当今人工智能和机器学习中最热门的主题之一,并且这一领域的研究正在快速发展。 在**强化学习****RL**)中,代理将他们的行动和经验转化为学习,以便将来做出更好的决策。
增强学习不属于有监督或无监督的机器学习范式,因为它本身就是一个领域。 在监督学习中,我们尝试学习一个映射`F: X → Y`,将输入`X`映射到输出`Y`,而在强化学习中,主体学习 通过反复试验采取最佳行动。 当业务代表执行任务出色时,将分配奖励,而当业务代表执行不好时,则要支付罚款。 代理试图吸收这些信息,并学会在类似的情况下不重复这些错误。 代理人所处的这些条件称为状态。 “图 9.1”显示了强化学习框架中环境中代理的交互作用:
增强学习不属于有监督或无监督的机器学习范式,因为它本身就是一个领域。 在监督学习中,我们尝试学习一个映射`F: X → Y`,将输入`X`映射到输出`Y`,而在强化学习中,智能体学习通过反复试验采取最佳行动。 当业务代表执行任务出色时,将分配奖励,而当业务代表执行不好时,则要支付罚款。 代理试图吸收这些信息,并学会在类似的情况下不重复这些错误。 代理人所处的这些条件称为状态。 “图 9.1”显示了强化学习框架中环境中代理的交互作用:
![](img/9d2d1715-a781-4b00-9312-09d3cd27cc1b.png)
......
......@@ -10,7 +10,7 @@
# 设计和构建数据管道
训练**机器学习****ML**)模型和**深度神经网络****DNN**)时,最重要的要求之一 从给定的样本空间中具有分布的大型训练数据集(通常是未知的,我们在 ML 或 DNN 训练中了解到),以便 ML 模型和 DNN 可以从给定的训练数据中学习,并很好地推广到看不见的未来或分离出来的测试数据。 此外,通常与训练集分布来自同一来源的验证数据集对于微调模型超参数至关重要。 在许多情况下,开发人员会从可用的数据(无论是少量还是大量)入手,以训练机器学习模型,包括大容量的深度学习...
训练**机器学习****ML**)模型和**深度神经网络****DNN**)时,最重要的要求之一,是在给定的样本空间中具有同分布的大型训练数据集(通常是未知的,我们在 ML 或 DNN 训练中了解到),以便 ML 模型和 DNN 可以从给定的训练数据中学习,并很好地推广到看不见的未来或分离出来的测试数据。 此外,通常与训练集分布来自同一来源的验证数据集对于微调模型超参数至关重要。 在许多情况下,开发人员会从可用的数据(无论是少量还是大量)入手,以训练机器学习模型,包括大容量的深度学习...
# 原始数据
......@@ -308,7 +308,7 @@ dataset = (Dataset.from_tensor_slices(filenames)
cycle_length=4, block_length=16))
```
`cycle_length``block_length`参数控制元素生成的顺序。 `cycle_length`控制同时处理的输入元素的数量。 例如,如果将`cycle_length`设置为 1,则此转换将一次处理一个输入元素,并将产生与`tf.data.Dataset.flat_map`相同的结果。 通常,此转换会将`map_func`应用于`cycle_length`输入元素,在返回的数据集对象上打开迭代器,并对其进行循环,从每个迭代器生成`block_length`连续元素,然后在每次到达下一个输入元素时就使用 迭代器的末尾
`cycle_length``block_length`参数控制元素生成的顺序。 `cycle_length`控制同时处理的输入元素的数量。 例如,如果将`cycle_length`设置为 1,则此转换将一次处理一个输入元素,并将产生与`tf.data.Dataset.flat_map`相同的结果。 通常,此转换会将`map_func`应用于`cycle_length`输入元素,在返回的数据集对象上打开迭代器,并对其进行循环,从每个迭代器生成`block_length`连续元素,然后在每次到达迭代器的末尾时就使用下一个输入元素
```py
a = Dataset.range(1, 6) # ==> [ 1, 2, 3, 4, 5 ]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册