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