『TensorFlow』从磁盘读取数据

2022-02-25

十图详解数据读取机制

一、输入管道读取数据流

1)。创建文件名列表

相关函数:tf.train.

2)。创建文件名队列

相关函数:tf. train.r

3)。创建读取数据

tf. , tf。 , tf。 , tf。 , tf。 , tf.der …

4).创建解码器转换格式

tf. , tf。 , tf.图像。 …

5).创建样本队列

相关函数:tf.train.

二、常用,CSV文件读取介绍

读者:tf.

解析器:tf.

二进制文件读取

读者:tf.der

解析阅读器:tf.

图像文件读取

读者:tf.

解析器:tf.image.,tf.image., tf.image., tf.image.

文件读取

读者:tf.

解析器:tf.

或者使用 slim 提供的简单方法:slim.. 和 slim.r。方法,一般是slim..作为函数返回,需要接收和作为参数。

def get_split(record_file_name, num_sampels, size):
    reader = tf.TFRecordReader
    keys_to_features = {
        "image/encoded": tf.FixedLenFeature((), tf.string, ''),
        "image/format": tf.FixedLenFeature((), tf.string, 'jpeg'),
        "image/height": tf.FixedLenFeature([], tf.int64, tf.zeros([], tf.int64)),
        "image/width": tf.FixedLenFeature([], tf.int64, tf.zeros([], tf.int64)),
    }
    items_to_handlers = {
        "image": slim.tfexample_decoder.Image(shape=[size, size, 3]),
        "height": slim.tfexample_decoder.Tensor("image/height"),

图片[1]-『TensorFlow』从磁盘读取数据-唐朝资源网

"width": slim.tfexample_decoder.Tensor("image/width"), } decoder = slim.tfexample_decoder.TFExampleDecoder( keys_to_features, items_to_handlers ) return slim.dataset.Dataset( data_sources=record_file_name, reader=reader, decoder=decoder, items_to_descriptions={}, num_samples=num_sampels ) def get_image(num_samples, resize, record_file="image.tfrecord", shuffle=False): provider = slim.dataset_data_provider.DatasetDataProvider( get_split(record_file, num_samples, resize), # slim.dataset.Dataset 做参数 shuffle=shuffle ) [data_image] = provider.get(["image"]) # Provider通过TFR字段获取batch size数据 return data_image

三、以图片文件为例

filename_queue = tf.train.string_input_producer(filenames, 
                                                shuffle=shuffle, num_epochs=epochs)
                                                reader = tf.WholeFileReader()
_, img_bytes = reader.read(filename_queue)
image = tf.image.decode_png(img_bytes, channels=3) 
        if png else tf.image.decode_jpeg(img_bytes, channels=3)

1.创建文件名队列

filename_queue = tf.train.string_input_producer(filenames)

2.读卡器初始化&单读规则设置

# 初始化阅读器,这里以定长字节阅读器为例,实际读取图片一般使用WholeFileReader
reader = tf.FixedLengthRecordReader(record_bytes=record_bytes)
# 指定被阅读文件
result.key, value = reader.read(filename_queue)

图片[2]-『TensorFlow』从磁盘读取数据-唐朝资源网

3.单次读取数据

# Convert from a string to a vector of uint8 that is record_bytes long.
# read出来的是一个二进制的string,将它解码依照uint8格式解码
record_bytes = tf.decode_raw(value, tf.uint8)
…… ……

由于读取的数据没有静态形状,需要使用.()来指定形状(或者在处理中给出显示的形状,比如使用use等函数),否则无法创建图形

read_input.label.set_shape([1])

4. 输入到网络中

将最终规则传入batch pool节点,输出张量可以直接送入网络

images_train, labels_train = cifar10_input.distorted_inputs(data_dir=data_dir,
                                                            batch_size=batch_size)
…… ……
image_batch, label_batch = sess.run([images_train, labels_train])
_, loss_value = sess.run(
           [train_op, loss],
                   feed_dict={image_holder:image_batch, label_holder:label_batch})

图片[3]-『TensorFlow』从磁盘读取数据-唐朝资源网

5.初始化队列(这里也添加了相关的线程控制器组件)

# 启动数据增强队列
tf.train.start_queue_runners()

附上线程控制组件使用说明,

import tensorflow as tf
sess = tf.Session()
coord = tf.train.coordinator()
threads = tf.train.start_queue_runners(sess=sess,coord=coord)
# 训练过程
coord.request_stop()
coord.join(threads)

分类:

技术要点:

相关文章:

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片