Pytorch 处理数据管道的最佳方法,其中训练输入是随机抽样的,并从第二个数据集中使用torch.utils.data检索

Pytorch 处理数据管道的最佳方法,其中训练输入是随机抽样的,并从第二个数据集中使用torch.utils.data检索,pytorch,Pytorch,下面是我正在尝试做的一个例子。以下是我的数据集的外观 2 | 34, 64, 2243, 55678, 323, 778, 4454, 23, 4433, 3445, 455, 32 23 | 343 ,56, 2, 5, 675, 34, 232, 677, 7, 54, 436, 77, 85, 33 592 | 343, 54, 4, 6 23 | 34 123 | 2, 4, 54, 38, 6643, 67, 3 ... 这些数字中的每一个都是索引(不是实际的模型输入/目标数

下面是我正在尝试做的一个例子。以下是我的数据集的外观

2   | 34, 64, 2243, 55678, 323, 778, 4454, 23, 4433, 3445, 455, 32
23  | 343 ,56, 2, 5, 675, 34, 232, 677, 7, 54, 436, 77, 85, 33
592 | 343, 54, 4, 6
23  | 34
123 | 2, 4, 54, 38, 6643, 67, 3
...
这些数字中的每一个都是索引(不是实际的模型输入/目标数据),它们指向将被输入到模型中的实际数据。实际的模型数据位于一个单独的数据集中,由索引组织(与第一个数据集中使用的数字相同),因此看起来像这样

1 | data1
2 | data2
3 | data3
target = torch.tensor([data2])
input = torch.mean( torch.tensor([data34]), torch.tensor([data2243]), torch.tensor([data23]), torch.tensor([data32]) )
对于第一组,左侧是目标的索引,即so 2、23、592、23、123。右侧是潜在输入的索引,对于每个目标,随机选取4个输入。对于输入数量小于4的目标,重复输入

以第一组中的第一个训练示例为例,模型输入如下所示

1 | data1
2 | data2
3 | data3
target = torch.tensor([data2])
input = torch.mean( torch.tensor([data34]), torch.tensor([data2243]), torch.tensor([data23]), torch.tensor([data32]) )
这两个集合太大,无法同时保存在内存中,而且我没有足够的磁盘空间来保存每个输入排列的目标

我认为最好的策略是提前设置X个批次,使用多线程设置未来的批次,这样数据管道就不会成为培训中的瓶颈,但我想知道如何做到这一点

编辑:

我认为我的描述有点模糊,所以我对我试图开发的数据管道类型进行了一个类比

一个类比是某些类型的单词嵌入训练,其中输入单词的数量小于上下文窗口。因此,对于特定的目标词,需要在该目标词的上下文窗口内随机选择输入词

例如,以这句话为例:

曾经有一只非常快的狗,它能跑得比城里任何其他动物都快。

假设目标单词是dog,上下文窗口大小是6,但输入大小是2。因此,我们可以选择“a”、“very”、“fast”、“who”、“can”、“out”,其中我们需要随机选择两个输入。因此,一个训练示例是以“dog”为目标的单词嵌入,以及输入的“fast”和“out”的单词嵌入

因此,在单词嵌入训练中,许多不同的输入将用于许多不同的目标。但是通过单词嵌入训练,所有单词嵌入都可以存储在实时内存中,因为单词的词汇量是6位数。就我而言,输入不可能都在实时内存中

所以我想做的是word2vec培训,但大多数word嵌入都必须在特定情况下保留在磁盘空间中