tensorflow作为符号编程框架,需要先构建数据流图,再读取数据,然后再进行训练。tensorflow提供了以下三种方式来加载数据:
预加载数据(preloaded data):在tensorflow图中定义常量或变量来保存所有数据
填充数据(feeding):Python产生数据,再把数据填充到后端
从文件中读取数据(reading from file):通过队列管理器从文件中读取数据
下面将详细介绍这三种加载数据的方法以及它们之间的优缺点
一、预加载数据
1、以constant的方式进行预加载
2、以variable的方式加载数据
通过预加载的方式加载数据的缺点在于,将数据直接嵌入到数据流图中,当训练数据较大时,很消耗内存。
二、填充数据
填充数据是使用sess.run()中的feed_dict参数,将Python产生的数据填充给后端
填充数据也存在数据量大、消耗内存等缺点,并数据类型转换等中间环节也增加了不少的内存开销。这时候最好采用最后一种加载数据的方式,先在图中定义好文件读取的方法,通过TensorFlow从文件中读取数据,再解码成为训练数据。
三、从文件读取数据
从文件中读取数据,主要分为两个步骤:
1、将样本写入到TFRecords二进制文件中
2、再从队列中读取解码成为可以进行训练的数据
原文及代码:https://blog.youkuaiyun.com/sinat_29957455/article/details/82050351
https://blog.youkuaiyun.com/songbinxu/article/details/80136836
每个epoch/batch将内存中的Numpy数据送入placeholder,只适用于小数据集,会相当占用内存。
从硬盘里的txt或csv文件读取,IO操作比较耗时。
读取tensorflow推荐的TFRecord文件