python - h5py - HDF5 数据库随机返回 NaN 和具有多个读者的非常小的数据?

标签 python numpy hdf5 h5py

我有一个 HDF5 数据集,我正在使用一个框架来创建多个进程来读取它(PyTorch 的 DataLoader,但这个框架应该不重要)。我正在随机索引 3D float 组的第一个维度,为了调试发生的事情,我一直在对索引中的切片求和。每隔一段时间,总和切片就会变成 nan 或一个非常小的值(一个不应该出现在我的数据中的值)。如果我连续两次执行相同的索引,那么另一次的值是正确的(第一个或第二个索引可能会出错)。例如,下面是我在索引过程中得到的一些值,其中左边应该与右边匹配,但有时值会出错:

21.2162 21.2162
89.9759 6.5469e-33
35.7114 35.7114
35.2934 35.2934
56.8512 56.8512
42.2215 42.2215
11.5307 nan
19.2904 19.2904
25.4261 25.4261

这来自于一个接一个地索引:

print(dataset[index].sum(), end=' ')
print(dataset[index].sum())

当我只使用一个进程来索引数据集时,问题似乎没有出现。数据集仅被读取(无写入)。有谁知道为什么会发生这种情况以及是否有办法阻止这种情况?

最佳答案

我遇到了同样的问题,在花了一天时间尝试通过 h5py 将 PyTorch DataParallel 加载器包装器与 HDF5 结合之后,我发现在新进程中打开 h5py.File 至关重要,而不是在主进程中打开它并希望它被底层多处理实现继承。

由于 PyTorch 似乎采用惰性方式来初始化 worker,这意味着实际的文件打开必须在 Dataset 包装器的 __getitem__ 函数内部发生。

关于python - h5py - HDF5 数据库随机返回 NaN 和具有多个读者的非常小的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46045512/

相关文章:

python - 将 rgb 代码列表转换为 matplotlib 颜色图

python - 我应该如何在 Google App Engine 项目中导入 django.middleware 类?

numpy - numpy.add.at 可以与二维索引一起使用吗?

python - 在 TensorFlow 中导入巨大的非图像数据集

python - 在 HDF 存储中构建数据结构

python - 如何从 "B"类中调用 "A"类的实例方法?

python - 获取 zeep.exceptions.ValidationError : Missing element for method that worked with suds

Python JSON 编码器将 NaN 转换为 null

python - 将 python 中的数据框 reshape 为 3D

machine-learning - 多个 HDF5 文件的 HDF5 数据层定义