TensorFlow学习笔记(五)图像数据处理

目录:

  一、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输入数据处理框架

猜你喜欢

转载自www.cnblogs.com/zuoshoushizi/p/9232095.html