【发布时间】: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.collate_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.collate_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