python如何读取tfrecord_Python转换并读取TFRecord⽂件时间:2020-04-10
概述:TFRecord
除了读取TFRecord⽂件,还使⽤coordinator协同多线程处理,下⾯是具体代码:
#tf.train.batch和tf.train.shuffle_batch除了实现数据的组合,还实现了并⾏化处理数据的⽅法
#如果需要多个线程处理不同⽂件的样例时,可以使⽤tr.train.shuffle_batch_join函数。
#这个函数会平均分配⽂件以保证不同⽂件⾥的数据会被尽量平均的使⽤
import tensorflow as tf
#创建⼀个readeer来读取TFRecord⽂件⾥的样例
reader = tf.TFRecordReader()
# match_filename_once函数获取⽂件列表,⽀持正则表达式匹配
files = tf.train.match_filenames_once("./output.tfrecords")
#创建⼀队列来维护输⼊⽂件列表,shuffle参数⽀持随机打乱⽂件列表的⽂件出队顺序
filename_queue = tf.train.string_input_producer(files,shuffle=False)
#也可以不使⽤上⾯的match_filenames_once函数,
#filename_queue = tf.train.string_input_producer(["./output.tfrecords"],shuffle=False
#从⽂件⾥读出⼀个样例,也可以使⽤read_up_to函数⼀次读取多个样例
_,serialized_ad(filename_queue)
#解析读⼊的⼀个样例,可以使⽤parse_example⼀次解析多个样例
features = tf.parse_single_example(
serialized_example,
#Tensorflow提供两种不同的属性解析⽅法,⼀种⽅法是tf.FixedLenFeature,这样的⽅法解析的结果是⼀个Tensor
#另⼀种⽅法是tf.VarLenFeature,这种⽅法得到的解析结果为SparseTensor,⽤以处理稀疏数据
#这⾥解析数据的格式需要和上⾯程序写⼊数据的格式⼀致
features={
'image_raw':tf.FixedLenFeature([],tf.string),
'pixels':tf.FixedLenFeature([],tf.int64),
'label':tf.FixedLenFeature([],tf.int64),
})
#tf.decode_raw可以将字符串解析成图像对应的像素数组
images = tf.decode_raw(features['image_raw'],tf.uint8)
labels = tf.cast(features['label'],tf.int32)
pixels = tf.cast(features['pixels'],tf.int32)
#组合训练数据tf.train.batch和tf.train.shuffle_batch
#⼀个batch⾥样例的个数
batch_size=3
#组合样例的队列⾥最多可以存储的样例个数。队列如果太⼤,则会占⽤很多的内存资源,太少,那么出队操作可能会因为没有数据⽽被阻碍(block)
#从⽽导致训练效率降低,⼀般队列⼤⼩与batch的⼤⼩相关,如果设置了min_after_dequeue那么ca=min+3*bat
capacity = 1000+3*batch_size
#因为这⾥⽤的mnist数据的tfrecords格式⽂件,需要做⼀些处理,否则会报错
image = tf.reshape(images, [1, 784, 1])
#这⾥⽤的是shuffle_batch操作,会将顺序打乱
image_batch, label_batch = tf.train.shuffle_batch(
[image, labels], batch_size=batch_size, num_threads=2,
capacity=capacity,
min_after_dequeue=100)#出队后最⼩剩余量,数量太⼩的话,随机打乱数据的作⽤不⼤。当
#出队函数被调⽤,但是队列⾥的元素不够的时候,出队操作将会等待更多元素⼊队才会完成
with tf.Session() as sess:
#本例中没有声明变量,但是使⽤match_filenames_once函数需要初始化⼀些变量
tf.global_variables_initializer().run()
#启动多线程处理输⼊数据
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess,coord=coord)
#每次云霞可以读取TFRecord⽂件的⼀个样例,当所有的样例都读完之后,在此样例⾥程序会在重头读取。
for i in range(2):
python怎么读文件夹下的文件夹image,label,pixel = sess.run([images,labels,pixels])
#获取并打印组合之后的样例
cur_image_batch,cur_label_batch = sess.run([image_batch,label_batch])
print cur_image_batch,cur_label_batch
#print pixel
coord.join(threads)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论