有没有办法为文件夹中的多个 pytorch 文件创建训练数据集?
Is there a way to create a train dataset for multiple pytorch files in a folder?
我有一个名为 processed_data
的文件夹。
在这个文件中,我有多个 .pt
文件,它们分别命名为 data_0.pt
、data_1.pt
、data_2.pt
、data_3.pt
、data_4.pt
、data_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
显然,您的确切用途看起来会有所不同。但这应该可以帮助您入门。
我有一个名为 processed_data
的文件夹。
在这个文件中,我有多个 .pt
文件,它们分别命名为 data_0.pt
、data_1.pt
、data_2.pt
、data_3.pt
、data_4.pt
、data_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
显然,您的确切用途看起来会有所不同。但这应该可以帮助您入门。