TensorFlow------TFRecords的读取实例
TensorFlow------TFRecords的读取实例:
import os
import tensorflow as tf # 定义cifar的数据等命令行参数
FLAGS = tf.app.flags.FLAGS
tf.app.flags.DEFINE_string('cifar_dir', './data/cifar10/cifar-10-batches-bin', '文件的目录')
tf.app.flags.DEFINE_string('cifar_tfrecords', './tmp/cifar.tfrecords', '存储tfrecords的文件') class CifarRead(object):
'''
完成读取二进制文件,写进tfrecords,读取tfrecords
:param object:
:return:
''' def __init__(self, filelist):
# 文件列表
self.file_list = filelist # 定义读取的图片的一些属性
self.height = 32
self.width = 32
self.channel = 3
# 二进制文件每张图片的字节
self.label_bytes = 1
self.image_bytes = self.height * self.width * self.channel
self.bytes = self.label_bytes + self.image_bytes def read_and_decode(self):
# 1. 构建文件队列
file_queue = tf.train.string_input_producer(self.file_list) # 2. 构建二进制文件读取器,读取内容,每个样本的字节数
reader = tf.FixedLengthRecordReader(self.bytes) key, value = reader.read(file_queue) # 3. 解码内容,二进制文件内容的解码 label_image包含目标值和特征值
label_image = tf.decode_raw(value, tf.uint8)
print(label_image) # 4.分割出图片和标签数据,特征值和目标值
label = tf.slice(label_image, [0], [self.label_bytes]) image = tf.slice(label_image, [self.label_bytes], [self.image_bytes])
print('---->')
print(image) # 5. 可以对图片的特征数据进行形状的改变 [3072]-->[32,32,3]
image_reshape = tf.reshape(image, [self.height, self.width, self.channel]) print('======>')
print(label)
print('======>') # 6. 批处理数据
image_batch, label_batch = tf.train.batch([image_reshape, label], batch_size=10, num_threads=1, capacity=10) print(image_batch, label_batch) return image_batch, label_batch
# 读取并存储tfrecords文件
# def write_ro_tfrecords(self, image_batch, label_batch):
# '''
# 将图片的特征值和目标值存进tfrecords
# :param image_batch: 10张图片的特征值
# :param label_batch: 10张图片的目标值
# :return: None
# '''
# # 1.建立TFRecord存储器
# writer = tf.python_io.TFRecordWriter(FLAGS.cifar_tfrecords)
#
# # 2. 循环将所有样本写入文件,每张图片样本都要构造example协议
# for i in range(10):
# # 取出第i个图片数据的特征值和目标值
# image = image_batch[i].eval().tostring()
#
# label = int(label_batch[i].eval()[0])
#
# # 构造一个样本的example
# example = tf.train.Example(features=tf.train.Features(feature={
# 'image': tf.train.Feature(bytes_list=tf.train.BytesList(value=[image])),
# 'label': tf.train.Feature(int64_list=tf.train.Int64List(value=[label])),
# }))
#
# # 写入单独的样本
# writer.write(example.SerializeToString())
#
# # 关闭
# writer.close()
# return None def read_from_tfrecords(self):
# 1. 构造文件队列
file_queue = tf.train.string_input_producer([FLAGS.cifar_tfrecords]) # 2. 构造文件阅读器,读取内容example,value一个样本的序列化example
reader = tf.TFRecordReader() key, value = reader.read(file_queue) # 3. 解析example
features = tf.parse_single_example(value, features={
'image': tf.FixedLenFeature([], tf.string),
'label': tf.FixedLenFeature([], tf.int64),
}) print(features['image'], features['label']) # 4. 解码内容,如果读取的内容格式是string需要解码,如果是int64,float32不需要解码
image = tf.decode_raw(features['image'], tf.uint8) # 固定图片的形状,方便与批处理
image_reshape = tf.reshape(image, [self.height, self.width, self.channel]) label = tf.cast(features['label'], tf.int32) print(image_reshape, label) # 进行批处理
image_batch,label_batch = tf.train.batch([image_reshape, label], batch_size=10, num_threads=1, capacity=10) return image_batch,label_batch if __name__ == '__main__':
# 找到文件,构建列表 路径+名字 ->列表当中
file_name = os.listdir(FLAGS.cifar_dir) # 拼接路径 重新组成列表
filelist = [os.path.join(FLAGS.cifar_dir, file) for file in file_name if file[-3:] == 'bin'] # 调用函数传参
cf = CifarRead(filelist)
# image_batch,label_batch = cf.read_and_decode() image_batch, label_batch = cf.read_from_tfrecords() # 开启会话
with tf.Session() as sess:
# 定义一个线程协调器
coord = tf.train.Coordinator() # 开启读文件的线程
threads = tf.train.start_queue_runners(sess, coord=coord) # 存进tfrecords文件
# print('开始存储')
# cf.write_ro_tfrecords(image_batch,label_batch)
# print('结束存储')
# 打印读取的内容
print(sess.run([image_batch,label_batch])) # 回收子线程
coord.request_stop() coord.join(threads)
TensorFlow------TFRecords的读取实例的更多相关文章
- tensorflow二进制文件读取与tfrecords文件读取
1.知识点 """ TFRecords介绍: TFRecords是Tensorflow设计的一种内置文件格式,是一种二进制文件,它能更好的利用内存, 更方便复制和移动,为 ...
- 深度学习tensorflow实战笔记(2)图像转换成tfrecords和读取
1.准备数据 首选将自己的图像数据分类分别放在不同的文件夹下,比如新建data文件夹,data文件夹下分别存放up和low文件夹,up和low文件夹下存放对应的图像数据.也可以把up和low文件夹换成 ...
- Tensorflow创建和读取17flowers数据集
http://blog.csdn.net/sinat_16823063/article/details/53946549 Tensorflow创建和读取17flowers数据集 标签: tensorf ...
- (第二章第三部分)TensorFlow框架之读取二进制数据
系列博客链接: (第二章第一部分)TensorFlow框架之文件读取流程:https://www.cnblogs.com/kongweisi/p/11050302.html (第二章第二部分)Tens ...
- 关于Tensorflow 的数据读取环节
Tensorflow读取数据的一般方式有下面3种: preloaded直接创建变量:在tensorflow定义图的过程中,创建常量或变量来存储数据 feed:在运行程序时,通过feed_dict传入数 ...
- TensorFlow笔记-图片读取
回到上一篇文件的读取分这么几步: # 构造队列 # 1,构造图片文件的队列 file_queue = tf.train.string_input_producer(filelist) # 构造阅读器 ...
- Java学习-019-Properties 文件读取实例源代码
在这几天的学习过程中,有开发的朋友告知我,每个编程语言基本都有相应的配置文件支持类,像 Python 编程语言中支持的 ini 文件及其对应的配置文件读取类 ConfigParse,通过这个类,用户可 ...
- Java学习-017-EXCEL 文件读取实例源代码
众所周知,EXCEL 也是软件测试开发过程中,常用的数据文件导入导出时的类型文件之一,此文主要讲述如何通过 EXCEL 文件中 Sheet 的索引(index)或者 Sheet 名称获取文件中对应 S ...
- Java学习-016-CSV 文件读取实例源代码
上文(CSV文件写入)讲述了日常自动化测试过程中将测试数据写入 CSV 文件的源码,此文主要讲述如何从 CSV 文件获取测试过程中所需的参数化数据.敬请各位小主参阅,若有不足之处,敬请大神指正,不胜感 ...
随机推荐
- Django如何从Model中获取字段名称——verbose_name
一.背景 CRM项目重新总结一下,重写之前的项目发现有不少知识点已经忘记,所以特此来重新总结一下一便后续能够回忆起 二.代码分析 1. 核心代码 from django.conf.urls impor ...
- Java流(一)
流: 概念:Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络)读入到内存中,形成了流,然后将这些流还可 以写到另外的目的地(文 ...
- Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) D. Jury Meeting(双指针模拟)
D. Jury Meeting time limit per test 1 second memory limit per test 512 megabytes input standard inpu ...
- Python中sorted函数的用法(转)
[Python] sorted函数 我们需要对List.Dict进行排序,Python提供了两个方法 对给定的List L进行排序, 方法1.用List的成员函数sort进行排序,在本地进行排序,不返 ...
- JZYZOJ 1388 旅游 状压dp
http://172.20.6.3/Problem_Show.asp?id=1388 求拓扑排序方案数 状压dp,最开始以为是拓扑排序加数论或者搜索,没想到是状压dp,突然气死.jpg: 完全没有 ...
- [xsy1232]Magic
题意:一个无向图,每个点有$a_i,b_i$,对任意点$i$你都可以花费$b_i$的费用将$a_i$变为$0$,最后你还要付出$\sum\limits_{i=1}^n\max\limits_{(i,j ...
- 【计算几何】【分类讨论】Gym - 101243I - Land Division
题意:给你一个n个点的凸包,让你切一刀,使得它变成一个m边形和一个K边形,问你切的这一刀最短是多少. 如果m+K==n+4,那么一定切在两条边上,但是由于两个线段间的最短距离,至少会经过一条线段的一个 ...
- 【线段树区间合并】BZOJ1593-[Usaco2008 Feb]Hotel 旅馆
好无聊,以前写过没什么好讲的,水过.戳 #include<iostream> #include<cstdio> #include<cstdlib> #define ...
- 【Trie模板】HDU1251-统计难题
[题意] n统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). [思路] 裸题,不过G++好像会超内存,C++就不会. #include<iostream> #include& ...
- 【最大流】POJ3236-ACM Computer Factory
[题意] 装配一个电脑需要P个零件,现在给出N机器的信息,每个机器可以将k个电脑由状态{S1,S2..,Sp}转变为{Q1,Q2..,Qp},问最多能装配多少台电脑以及对应的方案? [思路] 1A.. ...