数据读取
TensorFlow的数据供给机制允许你在TensorFlow运算图中将数据注入到任一张量中通过给run()或者eval()函数输入 feed_dict 参数, 可以启动运算过程。
- 虽然你可以使用常量和变量来替换任何一个张量, 但是最好的做法应该是使用 placeholder op节点设计 placeholder 节点的唯一的意图就是为了提供数据供给(feeding)的方法。
placeholder节点被声明时是未初始化的,如果没有为它供给数据, 则TensorFlow运算的时候会产生错误, 所以千万不要忘了为 placeholder 提供数据。
with tf. Session() :
input = tf. placeholder(tf. float32)
classifier = …
print classifier. eval(feed_dict={input: my_python_preprocessing_fn() } )
从文件读取数据
一共典型的文件读取管线会包含下面这些步骤:- 文件名列表
- 可配置的 文件名乱序(shuffling)
- 可配置的 最大训练迭代数(epoch limit)
- 文件名队列
- 针对输入文件格式的阅读器
- 纪录解析器
- 可配置的预处理器
样本队列
* 文件名列表,可以用张量或者 tf.train.match_filenames_once 函数来产生文件名列表将文件名列表交给 tf.train.string_input_producer 函数. string_input_producer 来生成一个先入先出的队列,文件阅读器会需要它来读取数据。
tf.train.string_input_producer(string_tensor,
num_epochs=None, shuffle=True, seed=None, capacity=32,name=None)
args:
string_tensor 产生的字符串张量
num_epochs :一个可选参数,整型,迭代次数.如果不指定,就一直循环运行无限次
shuffle=True 会对文件名进行乱序处理
seed: 整型 可选参数,当shuffle=true指定源文件格式
根据不同的文件格式,选择对应的文件阅读器,然后将文件名队列提供给阅读器的 read 方法,得到一个key表示输入的文件和其中的记录,同时得到一个字符串标量,这个字符串
标量可以被一个或多个解析器,或者转换操作将其解码为张量并且构造称为样本。
eg: csvfilename_queue = tf. train. string_input_producer([“file0.csv”, “file1.csv”] )
使用read方法reader = tf. TextLineReader()
key, value = reader. read(filename_queue)filename_queue = tf. train. string_input_producer([“file0.csv”, “file1.csv”] )
reader = tf. TextLineReader()
key, value = reader. read(filename_queue)
// Default values, in case of empty columns. Also specifies the type of the
//decoded result.
record_defaults = [[1] , [1] , [1] , [1] , [1] ]
col1, col2, col3, col4, col5 = tf. decode_csv(
value, record_defaults=record_defaults)
features = tf. concat(0, [col1, col2, col3, col4] )
with tf. Session() as sess:
// Start populating the filename queue.
coord = tf. train. Coordinator()
// 在使用run()和eval执行read之前,必须调用f.train.start_queue_runners 来将文件名填充到队
列。
threads = tf. train. start_queue_runners(coord=coord)
for i in range(1200) :
// Retrieve a single instance:
example, label = sess. run([features, col5] )
coord. request_stop()
coord. join(threads)
- 固定长度的记录
从二进制文件中读取固定长度纪录, 可以使用 tf.FixedLengthRecordReader 的 tf.decode_raw 操作。 decode_ra
w 操作可以讲一个字符串转换为一个uint8的张量。
cifa-10的的每条记录的长度是固定的,前一个字节为标签,后面的是图像数据. - 标准tensorflow格式
- 预处理你
可以对输入的样本进行任意的预处理,例如归一化处理 等等 - 批处理
在数据输入管线的末端, 我们需要有另一个队列来执行输入样本的训练,评价和推理。因此我们使用 tf.train.s
huffle_batch 函数来对队列中的样本进行乱序处理