有没有办法为文件夹中的多个 pytorch 文件创建训练数据集?

Is there a way to create a train dataset for multiple pytorch files in a folder?

我有一个名为 processed_data 的文件夹。 在这个文件中,我有多个 .pt 文件,它们分别命名为 data_0.ptdata_1.ptdata_2.ptdata_3.ptdata_4.ptdata_5.pt , ....., data_998.pt, data_999.pt, data_1000.pt, data_1001.pt。 所有这些 .pt 文件都表示使用 pytorch-geometric 创建的图形。

我的问题是,如何保存加载所有这些文件来创建我的训练数据集,以便我可以在 DataLoader 中使用它们?

火炬 DataLoader 需要一个 Dataset 对象。在定义数据集 class 时,您需要实现 __init____len____getitem__.

__init__很简单,但也取决于你的具体用途case/context。假设最简单的情况,我将定义 init 以获取数据文件夹和一个包含训练集文件名称的文件(每行一个)。然后,我会将每个文件名作为 class 的成员存储在一个列表中。所以我们有:

def __init__(self, data_folder, data_list_filename):
    self.data_folder = data_folder
    with open(data_list_filename, 'r') as f:
        self.data_file_list = f.read().splitlines()

好的,现在我们在您的 Dataloader 中存储了两件事:1) 数据文件夹和 2) 数据文件名列表。这使得 __len__ 特别容易:

def __len__(self):
    return len(self.data_file_list)

最后,我们只需要处理 __get_item__:

def __getitem__(self, idx):
    filename = self.data_file_list[idx]
    data, label = extract_data_from_file(filename) # this is arbitrary because I don't know how you need to do this
    return data, label

然后将所有这些放在一起 class:

class MyDataset(Dataset):
    def __init__(self, data_folder, data_list_filename):
        self.data_folder = data_folder
        self.data_file_list = open(data_list_filename, 'r').read().splitlines()

    def __len__(self):
        return len(self.data_file_list)

    def __getitem__(self, idx):
        filename = self.data_file_list[idx]
        data, label = extract_data_from_file(filename) # idk how you plan to do this
        return data, label

显然,您的确切用途看起来会有所不同。但这应该可以帮助您入门。