报错解决:“TypeError: expected np.ndarray (got numpy.ndarray)“
·
该报错发生在使用 h5py 读取 h5 文件后对数据集类型进行转化过程中。具体代码如下:
data = h5py.File(file_path)
gt = data["gt"][...]
gt = np.asarray(gt, dtype=np.float32)
# 报错位置
self.gt = torch.from_numpy(gt)
# 报错位置
将变量 gt 从 numpy 数组类型转化 torch 张量类型操作,发生输入类型 numpy.array 不匹配 要求类型 np.array ,但实际上这两者是相同的。对于该问题,第一时间其实能猜测到应当是 numpy 版本或 torch 版本之间可能存在冲突。因此,查询可知:PyTorch 2.1.x 系列目前对 NumPy 2.0 的兼容性不完全。
解决方式:降低 numpy 版本至 1.X 即可(1.26.4)
pip install numpy==1.26.4
同时,需要修改原代码中 gt 读取方式:
# from
gt = data["gt"][...]
# to
gt = data["gt"]
解释: gt = data["gt"],返回 h5py.Dataset 对象(指向 HDF5 中 "gt" 的数据),数据并没有立即加载。gt = data["gt"][...]或 gt = data["gt"][:],立即读取并尝试转换为 NumPy 数组,h5py 会尝试将底层数据拷贝并转为标准 np.ndarray,因此容易发生另一错误:ValueError: Insufficient precision in available types to represent (XX, XX, XX…)。
打印检查:
# numpy 2.0.1
print(type(gt))
# 输出结果:<class 'numpy.ndarray'>
# numpy 1.26.4
print(type(gt))
# 输出结果:<class 'numpy.ndarray'>
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)