![Figure 6.21: A representation of the batches for x and y ](img/B15778_06_21.jpg)
![Figure 6.21: A representation of the batches for x and y ](img/B15778_06_21.jpg)
图 6.21:x 和 y 批次的表示
图 6.21:x 和 y 批量的表示
批处理的生成可以通过以下代码片段实现:
批处理的生成可以通过以下代码片段实现:
...
@@ -425,11 +425,11 @@ for b in range(0, x.shape[1], 5):
...
@@ -425,11 +425,11 @@ for b in range(0, x.shape[1], 5):
注意
注意
尽管生成批次被视为预处理数据的一部分,但通常会在训练过程的`for`循环内部对其进行编程。
尽管生成批量被视为预处理数据的一部分,但通常会在训练过程的`for`循环内部对其进行编程。
## 一键编码
## 一键编码
将所有字符转换为数字不足以将其输入模型。 这是因为这种近似会给您的模型带来一些偏差,因为转换为更高数值的字符将被视为更重要。 为避免这种情况,优良作法是将不同批次编码为一热矩阵。 这包括创建一个具有零和一的三维矩阵,其中零表示不存在事件,而一个表示存在事件。 矩阵的最终形状应为`one hot = [number of sequences, sequence length, number of characters]`。
将所有字符转换为数字不足以将其输入模型。 这是因为这种近似会给您的模型带来一些偏差,因为转换为更高数值的字符将被视为更重要。 为避免这种情况,优良作法是将不同批量编码为一热矩阵。 这包括创建一个具有零和一的三维矩阵,其中零表示不存在事件,而一个表示存在事件。 矩阵的最终形状应为`one hot = [number of sequences, sequence length, number of characters]`。
您可以使用大小为 100 的单热点编码矢量为张量添加另一个维度(因为词汇量为 100 个单词)。 现在,您有了一个尺寸为 10 x 5 x 100 的张量对象,并且每个批次和每个句子一次传递一个单词。
您可以使用大小为 100 的单热点编码矢量为张量添加另一个维度(因为词汇量为 100 个单词)。 现在,您有了一个尺寸为 10 x 5 x 100 的张量对象,并且每个批量和每个句子一次传递一个单词。
现在,您必须对句子进行拆分和切分,最有可能的结果是,张量的大小为 10 x 1 x 100(每 10 个单词中的一个单词带有 100 维向量)。 您可以使用 10 x 100 的张量处理它,这使您的生活更加轻松。 继续使用`squeeze`从 10 x 1 x 100 张量得到 10 x 100 张量。
现在,您必须对句子进行拆分和切分,最有可能的结果是,张量的大小为 10 x 1 x 100(每 10 个单词中的一个单词带有 100 维向量)。 您可以使用 10 x 100 的张量处理它,这使您的生活更加轻松。 继续使用`squeeze`从 10 x 1 x 100 张量得到 10 x 100 张量。
`num_worker`参数决定应该操作多少个并行线程来获取数据。 这有助于避免 CPU 瓶颈,以便 CPU 可以赶上 GPU 的并行操作。 数据加载器允许用户指定是否使用固定的 CUDA 内存,这会将数据张量复制到 CUDA 的固定的内存中,然后再返回给用户。 使用固定内存是设备之间快速数据传输的关键,因为数据是由数据加载程序本身加载到固定内存中的,而无论如何,这都是由 CPU 的多个内核完成的。
`num_worker`参数决定应该操作多少个并行线程来获取数据。 这有助于避免 CPU 瓶颈,以便 CPU 可以赶上 GPU 的并行操作。 数据加载器允许用户指定是否使用固定的 CUDA 内存,这会将数据张量复制到 CUDA 的固定的内存中,然后再返回给用户。 使用固定内存是设备之间快速数据传输的关键,因为数据是由数据加载程序本身加载到固定内存中的,而无论如何,这都是由 CPU 的多个内核完成的。
...
@@ -272,7 +272,7 @@ train, val, test = data.TabularDataset.splits(
...
@@ -272,7 +272,7 @@ train, val, test = data.TabularDataset.splits(
PyTorch 的所有更高层 API 都希望通道(张量的深度)成为批次大小之后的第一维。 因此,形状(高度 x 宽度 x 通道(RGB))在[0,255]范围内的输入将转换为形状(通道(RGB)x 高度 x 宽度)在[0.0,255]之间的`torch.FloatTensor` 1.0]。 然后,将每个通道(RGB)的平均值和标准偏差设置为 0.5,进行标准化。 `torchvision`转换完成的规范化操作与以下 Python 函数相同:
PyTorch 的所有更高层 API 都希望通道(张量的深度)成为批量大小之后的第一维。 因此,形状(高度 x 宽度 x 通道(RGB))在[0,255]范围内的输入将转换为形状(通道(RGB)x 高度 x 宽度)在[0.0,255]之间的`torch.FloatTensor` 1.0]。 然后,将每个通道(RGB)的平均值和标准偏差设置为 0.5,进行标准化。 `torchvision`转换完成的规范化操作与以下 Python 函数相同:
有监督和无监督的学习是 AI 应用社区众所周知的。 **监督学习**处理包含输入特征和目标标签(连续或离散)的标记数据集,并创建将这些输入特征映射到目标标签的模型。 另一方面,**无监督学习**处理仅包含输入特征但不包含目标标签的未标记数据集,其目的是发现基础模式,以将数据分类到不同集群中,并分别定义其效用。 不同集群中特定类型的数据。
有监督和无监督的学习是 AI 应用社区众所周知的。 **监督学习**处理包含输入特征和目标标签(连续或离散)的标记数据集,并创建将这些输入特征映射到目标标签的模型。 另一方面,**无监督学习**处理仅包含输入特征但不包含目标标签的未标记数据集,其目的是发现基础模式,以将数据分类到不同集群中,并分别定义其效用。 不同集群中特定类型的数据。
因此,使用有监督和无监督的学习,我们可以创建数据分类器/回归器或数据生成器,通过一次学习就可以通过一批数据进行学习。 为了随着时间的推移增强学习,该批次需要合并越来越多的数据,从而导致有监督和无监督的学习变得缓慢且难以推广。 让我们考虑一种情况,您希望 AI 代理为您玩特定的视频/虚拟游戏,但要注意的是,随着时间的流逝,该算法应该变得智能。
因此,使用有监督和无监督的学习,我们可以创建数据分类器/回归器或数据生成器,通过一次学习就可以通过一批数据进行学习。 为了随着时间的推移增强学习,该批量需要合并越来越多的数据,从而导致有监督和无监督的学习变得缓慢且难以推广。 让我们考虑一种情况,您希望 AI 代理为您玩特定的视频/虚拟游戏,但要注意的是,随着时间的流逝,该算法应该变得智能。