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

时间:2019-04-02 11:12:02

标签: python pytorch hdf5 torch h5py

我正在尝试将hdf5数据集加载到pytorch培训中进行循环。

无论数据加载器中有num_workers个,这都会随机引发“ KeyError:'无法打开对象(找不到组件)'”(下面的回溯)。

我能够开始训练循环,但是如果没有这个错误,就无法通过一个纪元的1/4,这对于随机的“数据集”(每个2darray)都会发生。我可以使用常规的f['group/subroup'][()]在控制台中分别加载这些数组,这样就不会出现hdf文件损坏或数据集/数组出问题的情况。

我尝试过:

  • 根据人们使用pytorch遇到的其他各种问题来调整num_workers-仍然会发生0 num_workers的情况。
  • 升级/降级,炬管,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_12345//Ep_-1//AN_67891011//ABC"

摘录自数据加载器:

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

`

预期:训练循环

实际:ID /数据集/示例最初加载良好,然后经过20到200个步骤...

回溯(最近通话最近一次):

  

文件“ Documents / BSSA-loc / mamdl / models / main_v3.py”,第287行,在          main()main中的文件“ Documents / BSSA-loc / mamdl / models / main_v3.py”,第203行       对于我,(枚举(train_loader)中的(ID,图像,标签):文件“ /home/james/anaconda3/envs/jc/lib/python3.7/site-packages/torch/utils/data/dataloader.py”,   第615行,下一个       批处理= self.collat​​e_fn([i中的索引为self.dataset [i]])文件   “ /home/james/anaconda3/envs/jc/lib/python3.7/site-packages/torch/utils/data/dataloader.py”,   615行,在       批处理= self.collat​​e_fn([i中的索引为self.dataset [i]])文件   “ /home/james/Documents/BSSA-loc/mamdl/src/data_loading/Data_loader_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/_hl/group.py”,   第262行,在 getitem       oid = h5o.open(self.id,self._e(name),lapl = self._lapl)文件“ h5py / _objects.pyx”,第54行,位于h5py._objects.with_phil.wrapper
  在h5py._objects.with_phil.wrapper中的文件“ h5py / _objects.pyx”,第55行   在h5py.h5o.open中将文件“ h5py / h5o.pyx”插入第190行

     

KeyError:'无法打开对象(未找到组件)'

1 个答案:

答案 0 :(得分:0)

记录下来,我最好的猜测是这是由于我的hdf构造代码中的一个错误,该错误在附加模式下已停止并多次启动。 当查询f['group/subroup'][()]时,某些数据集看起来好像是完整的,但无法使用pytorch数据加载器加载。

自从以不同方式重建hdf以来,就没有这个问题。