看到一些深度学习的项目中,把图片数据集转换为numpy类型,然后保存为hdf5文件,然后再读取文件进行处理和导入神经网络。我有点想不通,保存为hdf5文件有什么用?
如果是为了读取速度快一点,那这些图片也就是一开始导入数据预处理的时候需要读取一次,后面就直接用处理后的numpy类型图片转成tensor类型进行训练。就读一次,就算读快一点也快不了多少吧。
而且假如说原来的数据集有500M,保存hdf5文件3G,这不是还占用更多的内存了吗?
还有一个问题,如果一开始把所有的图片都读进内存,创建自己的Dataset类和Dataloader,如果碰到一些大型的数据集就可能造成内存溢出,有没有什么解决方案?
我想到两种,一种是在dataset类的getitem (self,idx) 里面调用数据生成器,在类里面写一个调用一次就生成一个数据的生成器的函数,此时的idx是没有用的。每次调用的时候随机抽一张图片进行处理 ,作为一个数据。然后用dataloader包裹,batch_size如果设为32,就会调用32次数据生成器产生32个随机的数据。但是我不确定数据生成器里面怎么样随机抽一张图片,会不会训练了很多次,抽了很多次,结果数据集里面还有图片没有抽到,对效果产生一定影响?还有dataset类里面的len()函数即dataset的长度我应该怎么设置,一个epoch训练完一个len()大小的dataset,利用dataloader每次加载32个数据即一个batch,数据集长度应该是所需要训练的batch的数量×32,那我怎么确定batch的数量要多少?还是说直接设置长度为总共的图片数量即可?
我想到的第二种就是直接不加载所有的图片,而是先生成所有图片的地址保存为csv或者txt格式,然后进行打乱,dataset里面就按照idx读取路径,然后读取到图片进行处理,得到一个数据。然后也用dataloader包裹,两种方法内存中只需要加载当前的32张图片即可。但是按照这种方法的话,也不能使用hdf5保存,因为要用到图片的地址。
所以说在训练的时候,怎么样让占用的cpu内存尽可能小?
图片大小很大但是数量不是很多,图片数量很多但是每张图片不大,这两种情况应该怎么加载数据比较好?
最后,在深度学习图片处理中hdf5文件还有什么用?什么地方需要用到hdf5?
深度学习中有的项目将图片数据集保存为hdf5文件有什么用?什么时候需要用到hdf5?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
6条回答 默认 最新
- lezilisy 2022-05-21 21:51关注
刚看到这篇文章:https://blog.csdn.net/mogoweb/article/details/87881405?
转成numpy类型,保存为hdf5文件花了30G!加载到内存里面岂不是直接爆了?我想不通解决 无用评论 打赏 举报
悬赏问题
- ¥15 ubuntu子系统密码忘记
- ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
- ¥15 保护模式-系统加载-段寄存器
- ¥15 电脑桌面设定一个区域禁止鼠标操作
- ¥15 求NPF226060磁芯的详细资料
- ¥15 使用R语言marginaleffects包进行边际效应图绘制
- ¥20 usb设备兼容性问题
- ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
- ¥15 安装svn网络有问题怎么办
- ¥15 vue2登录调用后端接口如何实现