最近遇到这个问题,上网查+问同学,基本解决方法:keras,Pipeline,TFrecord,批次读取训练
先看第一个,keras,可能需要改网络什么的,不太想改(先挖个坑,以后学一下keras,小白一只,勿怪)
第三个:
TFrecord
https://blog.csdn.net/chenghtao/article/details/82110434
问题描述:利用tensorflow进行神经网络训练,当数据集较小或者内存足够大时,通常的做法是将全部数据集加载到内存里,然后再将数据集分批feed给网络进行训练(一般配合yield使用效果更佳)。但是,当数据集大到内存不足以全部加载进来的时候,必须寻找新的加载数据的方法。
解决办法:
可以尝试使用tensorflow提供的队列queue,训练时从文件中分批读取数据。这里选择tensorflwo内定的标准格式TFRecord.
解决思路其实说来也简单,打破思维定式就好了,不是把所有图片读到内存中,而是只把所有图片的路径一次性读到内存中。
大致的解决思路为:
将上万张图片的路径一次性读到内存中,自己实现一个分批读取函数,在该函数中根据自己的内存情况设置读取图片,只把这一批图片读入内存中,然后交给模型,模型再对这一批图片进行分批训练,因为内存一般大于等于显存,所以内存的批次大小和显存的批次大小通常不相同。