Python h5py随机无法打开对象(未找到组件)

Python h5py随机无法打开对象(未找到组件),python,pytorch,hdf5,torch,h5py,Python,Pytorch,Hdf5,Torch,H5py,我正在尝试将hdf5数据集加载到pytorch training for循环中 不管dataloader中有多少工作者,这都会随机抛出下面的KeyError:“无法打开未找到的对象组件”回溯 我能够启动训练循环,但无法通过一个历元的1/4而不出现这种错误,这种错误发生在每个都是2个数组的随机“数据集”上。我可以使用常规的f['group/subcurp'][]在控制台中单独加载这些阵列,这样就不会显示hdf文件已损坏或数据集/阵列有任何问题 我试过: 根据人们在pytorch中遇到的各种其他问题

我正在尝试将hdf5数据集加载到pytorch training for循环中

不管dataloader中有多少工作者,这都会随机抛出下面的KeyError:“无法打开未找到的对象组件”回溯

我能够启动训练循环,但无法通过一个历元的1/4而不出现这种错误,这种错误发生在每个都是2个数组的随机“数据集”上。我可以使用常规的f['group/subcurp'][]在控制台中单独加载这些阵列,这样就不会显示hdf文件已损坏或数据集/阵列有任何问题

我试过:

根据人们在pytorch中遇到的各种其他问题调整num_workers-0 num_workers仍然会发生这种情况。 升级/降级、torch、numpy和python版本。 在数据加载器getitem的末尾使用f.close 使用新的conda env并安装依赖项。 首先调用父组,然后初始化数组,例如: X=f[ID]然后X=X[] 在hdf路径中使用双斜杠 因为num_workers=0会递归,所以我认为这不是多线程问题,尽管回溯似乎指向/torch/utils/data/dataloader中准备下一批的行

我只是不明白为什么h5py不能随机地看到奇怪的单个数据集

ID是与hdf路径匹配的字符串,例如: ID=ID\u 12345//Ep\u-1//AN\u 67891011//ABC

摘自dataloader:

def __getitem__(self, index):

    ID = self.list_IDs[index]

    # Start hdf file in read mode:
    f = h5py.File(self.hdf_file, 'r', libver='latest', swmr=True)

    X = f[ID][()]

    X = X[:, :, np.newaxis] # torchvision 0.2.1 needs (H x W x C) for transforms

    y = self.y_list[index]

    if self.transform:
        X = self.transform(X)

    return ID, X, y
`

预期:为loop进行培训

实际:ID/数据集/示例最初加载良好,然后在20到200步之间加载

回溯最近一次呼叫上次:

文件Documents/BSSA loc/mamdl/models/main_v3.py,第287行,在 主文件Documents/BSSA loc/mamdl/models/main_v3.py,第203行,主文件 对于i、id、图像和标签,在文件/home/james/anaconda3/envs/jc/lib/python3.7/site-packages/torch/utils/data/dataloader.py中, 第615行,下一行 batch=self.collate\u fn[self.dataset[i]for i in index]文件 /home/james/anaconda3/envs/jc/lib/python3.7/site-packages/torch/utils/data/dataloader.py, 第615行,输入 batch=self.collate\u fn[self.dataset[i]for i in index]文件 /home/james/Documents/BSSA loc/mamdl/src/data\u load/data\u loader\u v3.py, 第59行,在getitem中 X=f[ID][]文件h5py/_objects.pyx,第54行,在h5py._objects.with_phil.wrapper文件h5py/_objects.pyx,第55行, 在h5py._objects.with_phil.wrapper文件中 /home/james/anaconda3/envs/jc/lib/python3.7/site-packages/h5py//u hl/group.py, 第262行,在getitem中 oid=h5o.openself.id,self.\u ename,lapl=self.\u lapl文件h5py/\u objects.pyx,第54行,在h5py.\u objects.with\u phil.wrapper中 文件h5py/_objects.pyx,第55行,在h5py._objects.with_phil.wrapper中 h5py.h5o.open中的文件h5py/h5o.pyx,第190行

KeyError:“无法打开未找到的对象组件”


为了记录在案,我最好的猜测是,这是由于我的hdf构造代码中的一个bug造成的,它在追加模式下多次停止和启动。 当查询f['group/subgroup'][]时,有些数据集看起来好像是完整的,但无法使用pytorch dataloader加载

自以不同方式重建hdf以来,从未出现过此问题