【问题标题】:h5py randomly unable to open object (component not found)h5py 随机无法打开对象(未找到组件)
【发布时间】:2019-05-03 17:29:32
【问题描述】:

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

不管数据加载器中的 num_workers,这会随机抛出“KeyError: 'Unable to open object (component not found)'”(下面的回溯)。

我能够开始训练循环,但如果没有随机“数据集”(每个数据集为 2darrays)发生此错误,则无法通过 1/4 个 epoch。我可以使用常规的f['group/subroup'][()] 在控制台中单独加载这些数组,因此看起来 hdf 文件已损坏或数据集/数组有任何问题。

我试过了:

  • 根据人们使用 pytorch 遇到的各种其他问题调整 num_workers - 仍然会发生 0 num_workers。
  • 升级/降级、torch、numpy 和 python 版本。
  • 在数据加载器的末尾使用 f.close() getitem
  • 使用新的 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 步之后...

Traceback(最近一次通话最后一次):

文件“Documents/BSSA-loc/mamdl/models/main_v3.py”,第 287 行,在 main() 文件“Documents/BSSA-loc/mamdl/models/main_v3.py”,第 203 行,在 main 对于我,枚举(train_loader)中的(ID、图像、标签):文件“/home/james/anaconda3/envs/jc/lib/python3.7/site-packages/torch/utils/data/dataloader.py”, 第 615 行,在 下一个 batch = self.collat​​e_fn([self.dataset[i] for i in indices]) 文件 “/home/james/anaconda3/envs/jc/lib/python3.7/site-packages/torch/utils/data/dataloader.py”, 第 615 行,在 batch = self.collat​​e_fn([self.dataset[i] for i in indices]) 文件 "/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.pyx”,第 55 行,在 h5py._objects.with_phil.wrapper 文件“h5py/h5o.pyx”,第 190 行,在 h5py.h5o.open 中

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

【问题讨论】:

    标签: python pytorch hdf5 torch h5py


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 2016-10-31
      • 2017-06-21
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多