Deep learning 如果事先不知道训练样本的顺序和总数,如何创建自定义PyTorch数据集?
我有一个42 GB的jsonl文件。该文件的每个元素都是一个json对象。我从每个json对象创建训练样本。但是我提取的每个json对象的训练样本数量可以在0到5个样本之间变化。在不读取内存中的整个jsonl文件的情况下创建自定义PyTorch数据集的最佳方法是什么Deep learning 如果事先不知道训练样本的顺序和总数,如何创建自定义PyTorch数据集?,deep-learning,pytorch,Deep Learning,Pytorch,我有一个42 GB的jsonl文件。该文件的每个元素都是一个json对象。我从每个json对象创建训练样本。但是我提取的每个json对象的训练样本数量可以在0到5个样本之间变化。在不读取内存中的整个jsonl文件的情况下创建自定义PyTorch数据集的最佳方法是什么 这就是我所说的数据集-。您有两个选择 如果有很多小文件不是问题,那么最简单的选择是将每个json对象预处理为单个文件。然后,您可以根据请求的索引读取每个索引。例如 class SingleFileDataset(数据集): def_
这就是我所说的数据集-。您有两个选择
class SingleFileDataset(数据集):
def_uuuinit_uuu(self,文件路径列表):
self.list_of_file_path=list_of_file_path
定义uu获取项目uu(自身,索引):
返回np.load(self.list_of_file_path[index])或单个文件的等效读取代码
n个
样本,我们在预处理期间将样本平均分割为c
文件。现在,要阅读索引i
处的示例,我们需要类拆分为文件数据集(数据集):
def_uuinit_uu(self,文件路径列表,n个拆分):
self.list_of_file_path=list_of_file_path
self.n_splits=n_splits
定义uu获取项目uu(自身,索引):
#索引//n\u splits是相关文件,并且
#索引%len(self)是该文件中的索引
file\u to\u load=self.list\u文件路径[索引//self.n\u拆分]
#加载文件
file=np.load(文件)
数据点=文件[索引%len(self)]
导入h5py
进口火炬
将torch.utils.data作为数据导入
H5类数据集(data.Dataset):
定义初始化(自,文件路径):
超级(H5Dataset,self)。\uuuu init\uuuuu()
h5_文件=h5py.file(文件路径)
self.data=h5_file.get('data'))
self.target=h5_file.get('label'))
定义uu获取项目uu(自身,索引):
return(torch.from_numpy(self.data[index,:,:,:,:]).float(),
torch.from_numpy(self.target[index,:,:,:]).float()
定义(自我):
返回self.data.shape[0]
我可以将每个json对象预处理为示例。但问题是一些json对象不返回任何样本,而有些对象最多返回5个样本。在这种情况下如何编写getitem方法?5个示例中的示例应该是不同的还是以某种方式分组的?如果它们是不同的,只需在预处理期间拆分它们即可。如果它们应该作为一个样本使用,那么只要返回对象中的任何内容就没有问题了?这会起作用的。我可以在批处理中获取json对象,并在调用模型之前拆分它们。虽然我在寻找一种更直接的方法。谢谢