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"), "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)
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})
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)
分类:
技术要点:
相关文章:
© 版权声明
本站下载的源码均来自公开网络收集转发二次开发而来,
若侵犯了您的合法权益,请来信通知我们1413333033@qq.com,
我们会及时删除,给您带来的不便,我们深表歉意。
下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,访问及下载者下载默认同意本站声明的免责申明,请合理使用切勿商用。
THE END
暂无评论内容