Deep learning 如何在Pytorch中处理大型JSON文件?

Deep learning 如何在Pytorch中处理大型JSON文件?,deep-learning,time-series,pytorch,Deep Learning,Time Series,Pytorch,我正在研究一个时间序列问题。不同的训练时间序列数据存储在一个30GB大小的大型JSON文件中。在tensorflow中,我知道如何使用TF记录。pytorch中有类似的方法吗?通常,您不需要更改/重载默认值 您应该研究的是如何创建一个 一旦你有了自己的数据集,知道如何从json文件中逐项提取,你就可以根据提供的数据集为你提供“香草”和所有批处理/多重处理等 例如,如果您有一个包含多个json文件的文件夹,每个文件都包含多个示例,那么您可以拥有一个类似以下内容的Dataset: 导入对分 类MyJ

我正在研究一个时间序列问题。不同的训练时间序列数据存储在一个30GB大小的大型JSON文件中。在tensorflow中,我知道如何使用TF记录。pytorch中有类似的方法吗?

通常,您不需要更改/重载默认值

您应该研究的是如何创建一个 一旦你有了自己的
数据集
,知道如何从json文件中逐项提取,你就可以根据提供的数据集为你提供“香草”和所有批处理/多重处理等

例如,如果您有一个包含多个json文件的文件夹,每个文件都包含多个示例,那么您可以拥有一个类似以下内容的
Dataset

导入对分 类MyJsonsDataset(data.Dataset): 定义初始化(self,jfolder): super(MyJsonsDataset,self)。\uuuu init\uuuu() self.filenames=[]。#跟踪需要加载的jfile文件 self.cumulative_size=[0]#记录到目前为止查看的示例数量 #这实际上不是python代码——只是供您遵循的伪代码 对于jfolder中的每个jsonfile: self.filenames.append(jsonfile) l=jsonfile中的示例数 self.cumulative_size.append(self.cumulative_size[-1]+l) #丢弃第一个元素 自我累积大小pop(0) 定义(自我): 返回自我。累积_大小[-1] def uu getitem uu(self,idx): #首先,您需要知道哪个文件包含idx示例 jfile_idx=bisect.bisect_right(self.cumulative_size,idx) 如果jfile_idx==0: 样本_idx=idx 其他: sample_idx=idx-self.cumulative_大小[jfile_idx-1] #现在需要从self.filenames[jfile\u idx]中检索'sample\u idx'示例 返回一个示例
通常,您不需要更改/重载默认值

您应该研究的是如何创建一个 一旦你有了自己的
数据集
,知道如何从json文件中逐项提取,你就可以根据提供的数据集为你提供“香草”和所有批处理/多重处理等

例如,如果您有一个包含多个json文件的文件夹,每个文件都包含多个示例,那么您可以拥有一个类似以下内容的
Dataset

导入对分 类MyJsonsDataset(data.Dataset): 定义初始化(self,jfolder): super(MyJsonsDataset,self)。\uuuu init\uuuu() self.filenames=[]。#跟踪需要加载的jfile文件 self.cumulative_size=[0]#记录到目前为止查看的示例数量 #这实际上不是python代码——只是供您遵循的伪代码 对于jfolder中的每个jsonfile: self.filenames.append(jsonfile) l=jsonfile中的示例数 self.cumulative_size.append(self.cumulative_size[-1]+l) #丢弃第一个元素 自我累积大小pop(0) 定义(自我): 返回自我。累积_大小[-1] def uu getitem uu(self,idx): #首先,您需要知道哪个文件包含idx示例 jfile_idx=bisect.bisect_right(self.cumulative_size,idx) 如果jfile_idx==0: 样本_idx=idx 其他: sample_idx=idx-self.cumulative_大小[jfile_idx-1] #现在需要从self.filenames[jfile\u idx]中检索'sample\u idx'示例 返回一个示例
我想
IterableDataset
()是您需要的,因为:

  • 您可能希望在不进行随机访问的情况下遍历文件
  • JSON中的样本数不是预先计算的
  • 我做了一个最小使用示例,假设数据集文件的每一行本身都是json,但您可以更改逻辑

    导入json
    从torch.utils.data导入数据加载器,IterableDataset
    类JsonDataset(IterableDataset):
    定义初始化(自我,文件):
    self.files=文件
    定义(自我):
    对于self.files中的json_文件:
    将open(json_文件)作为f:
    对于f中的样本线:
    sample=json.load(示例行)
    产量样本['x'],样本['time']。。。
    ...
    dataset=JsonDataset(['data/1.json','data/2.json',…]))
    dataloader=dataloader(数据集,批量大小=32)
    对于dataloader中的批处理:
    y=型号(批次)
    
    我想
    IterableDataset
    ()是您需要的,因为:

  • 您可能希望在不进行随机访问的情况下遍历文件
  • JSON中的样本数不是预先计算的
  • 我做了一个最小使用示例,假设数据集文件的每一行本身都是json,但您可以更改逻辑

    导入json
    从torch.utils.data导入数据加载器,IterableDataset
    类JsonDataset(IterableDataset):
    定义初始化(自我,文件):
    self.files=文件
    定义(自我):
    对于self.files中的json_文件:
    将open(json_文件)作为f:
    对于f中的样本线:
    sample=json.load(示例行)
    产量样本['x'],样本['time']。。。
    ...
    dataset=JsonDataset(['data/1.json','data/2.json',…]))
    dataloader=dataloader(数据集,批量大小=32)
    对于dataloader中的批处理:
    y=型号(批次)
    
    您可能正在寻找数据加载器、批处理和随机化。查看
    torch.utils.data.DataLoader
    I已选中。那里的所有文档基本上都是用于处理小数据集的。json文件中的模式是什么?它复杂吗?如果不复杂,我想你可以在
    torchtext
    中使用
    JsonDataset
    。它由时间序列数据组成,也包含NLP元素。你可能正在寻找数据加载程序、批处理和随机化。查看
    torch.utils.data.DataLoader
    I已选中。那里的所有文档基本上都是用于处理小数据集的。json文件中的模式是什么?它复杂吗?如果不复杂,我想您可以在
    torchtext