目录:
一、TFRecord输入数据格式
1.1 TFrecord格式介绍
1.2 TFRecord样例程序
二、图像数据处理
2.1TensorFlow图像处理函数
2.2图像预处理完整样例
三、多线程数据输入处理框架
3.1 队列与多线程
3.2输入文件队列
3.3组合训练数据(batching)
扫描二维码关注公众号,回复:
1771052 查看本文章
3.4输入数据处理框架
一、TFRecord输入数据格式
TensorFlow提供了一种统一的格式来存储数据,这个格式就是TFRecord
1.1 TFrecord格式介绍
TFRecord文件中的数据都是通过tf.train.Example Protocol Buffer 的格式存储的。格式如下
message Example{ Features features=1; } message Features{ map<string Feature> feature = 1; } message Feature{ oneof kind { BytesList bytes_list = 1; FloatList float_list =2 ; Int64List int64_list =3; } }
1.2 TFRecord样例程序
将数据转化为TFRecord格式
import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data import numpy as np #生成整数型的属性 def _int64_feature(value): return tf.train.Feature(int64_list = tf.train.Int64List(value=[value])) #生成字符串属性 def _byte_feature(value): return tf.train.Feature(bytes_list = tf.train.BytesList(value=[value])) mnsit = input_data.read_data_sets("mnist_set",one_hot=True) images = mnsit.train.images #训练数据所对应的正确答案,可以作为一个属性保存在TFRecord中。 labels = mnsit.train.labels #训练数据的图像分辨率,这可以作为Example中的一个属性。 pixels = images.shape[1] num_examples = mnsit.train.num_examples #输出TFRecord文件的地址。 filename = "path/to/output.tfrecords" #创建一个writer来写TFRecord文件。 writer = tf.python_io.TFRecordWriter(filename) for index in range(num_examples): #将图像矩阵转化为一个字符串。 image_raw = images[index].tostring() #将一个样例转化为Example Protocol Buffer ,并将所有信息写入这个数据结构。 example = tf.train.Example(features = tf.train.Features(feature={ "pixels":_int64_feature(pixels), "label":_int64_feature(np.argmax(labels[index])), 'image_raw':_byte_feature(image_raw) })) #将一个Example写入TFrecord中 writer.write(example.SerializeToString()) writer.close()
读取TFRecord文件
import tensorflow as tf #创建一个reader来读取TFRecord文件中的数据 reader = tf.TFRecordReader() #创建一个队列来维护输入文件列表 #tf.train.string_input_producer函数 filename_queue = tf.train.string_input_producer(["path/to/output.tfrecords"]) #从文件中读出一个样例。也可以使用read_up_to函数一次性读取多个样例 _,serialed_example = reader.read(filename_queue) #解析读入的一个样例。如果需要解析多个样例,可以用parse_example函数 features = tf.parse_single_example(serialed_example,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) #启动多线程处理数据 sess = tf.Session() coord = tf.train.Coordinator() thread = tf.train.start_queue_runners(sess=sess,coord= coord) #每次运行可以读取Tfrecord文件中的一个样例。当所有的样例都读完之后,在此样例程序中会重头读取 for i in range(10): image,label,pixel = sess.run([images,labels,pixels])
二、图像数据处理
通过图像的预处理,可以尽量避免模型受到无关因素的干扰。
2.1TensorFlow图像处理函数
tensorflow提供了几类图像处理的函数。
图像编码处理
2.2图像预处理完整样例
三、多线程数据输入处理框架
3.1 队列与多线程
3.2输入文件队列
3.3组合训练数据(batching)
3.4输入数据处理框架