图像数据处理
- 统一输入数据格式
- 图像数据预处理
- tensorflow多线程数据预处理
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 _bytes_feature(value):
return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))
mnist = input_data.read_data_sets("/path/to/MNIST_data", dtype=tf.uint8, one_hot=True)
images = mnist.train.images
#训练数据所对应的正确答案,可以作为一个属性来存储
labels = mnist.train.labels
#训练数据的图像分辨率,可以作为一个属性来存储
pixels = images.shape[0]
#训练数据的个数
num_examples = mnist.train.num_examples
#指定要写入TFRecord文件的地址
filename = "/path/to/output.tfrecords"
#创建一个write来写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': _bytes_feature(image_raw)}))
#将 Example 写入TFRecord文件
writer.write(example.SerializeToString())
writer.close()
读取:
import tensorflow as tf
reader=tf.TFRecordReader()
filename_queue=tf.train.string_input_producer(["/path/to/output.tfrecords"])
_,serialized_example=reader.read(filename_queue)
features=tf.parse_single_example(
serialized_example,
features={
'image_raw':tf.FixedLenFeature([],tf.string),
'pixels':tf.FixedLenFeature([],tf.int64),
'label':tf.FixedLenFeature([],tf.int64),
}
)
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()
threads=tf.train.start_queue_runners(sess=sess,coord=coord)
for i in range(10):
image,lable,pixel=sess.run([images,labels,pixels])