本例代码:https://github.com/yongyehuang/Tensorflow-Tutorial/tree/master/python/the_use_of_tfrecord

关于 tfrecord 的使用,分别介绍 tfrecord 进行三种不同类型数据的处理方法。
- 维度固定的 numpy 矩阵
- 可变长度的 序列 数据
- 图片数据

在 tf1.3 及以后版本中,推出了新的 Dataset API, 之前赶实验还没研究,可能以后都不太会用下面的方式写了。这些代码都是之前写好的,因为注释中都写得比较清楚了,所以直接上代码。

tfrecord_1_numpy_writer.py

# -*- coding:utf-8 -*- import tensorflow as tf
import numpy as np
from tqdm import tqdm'''tfrecord 写入数据.
将固定shape的矩阵写入 tfrecord 文件。这种形式的数据写入 tfrecord 是最简单的。
refer: http://blog.csdn.net/qq_16949707/article/details/53483493
'''# **1.创建文件,可以创建多个文件,在读取的时候只需要提供所有文件名列表就行了
writer1 = tf.python_io.TFRecordWriter('../data/test1.tfrecord')
writer2 = tf.python_io.TFRecordWriter('../data/test2.tfrecord')"""
有一点需要注意的就是我们需要把矩阵转为数组形式才能写入
就是需要经过下面的 reshape 操作
在读取的时候再 reshape 回原始的 shape 就可以了
"""
X = np.arange(0, 100).reshape([50, -1]).astype(np.float32)
y = np.arange(50)for i in tqdm(xrange(len(X))):  # **2.对于每个样本if i >= len(y) / 2:writer = writer2else:writer = writer1X_sample = X[i].tolist()y_sample = y[i]# **3.定义数据类型,按照这里固定的形式写,有float_list(好像只有32位), int64_list, bytes_list.example = tf.train.Example(features=tf.train.Features(feature={'X': tf.train.Feature(float_list=tf.train.FloatList(value=X_sample)),'y': tf.train.Feature(int64_list=tf.train.Int64List(value=[y_sample]))}))# **4.序列化数据并写入文件中serialized = example.SerializeToString()writer.write(serialized)print('Finished.')
writer1.close()
writer2.close()

tfrecord_1_numpy_reader.py

# -*- coding:utf-8 -*- import tensorflow as tf'''read data
从 tfrecord 文件中读取数据,对应数据的格式为固定shape的数据。
'''# **1.把所有的 tfrecord 文件名列表写入队列中
filename_queue = tf.train.string_input_producer(['../data/test1.tfrecord', '../data/test2.tfrecord'], num_epochs=None,shuffle=True)
# **2.创建一个读取器
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)
# **3.根据你写入的格式对应说明读取的格式
features = tf.parse_single_example(serialized_example,features={'X': tf.FixedLenFeature([2], tf.float32),  # 注意如果不是标量,需要说明数组长度'y': tf.FixedLenFeature([], tf.int64)}     # 而标量就不用说明)
X_out = features['X']
y_out = features['y']print(X_out)
print(y_out)
# **4.通过 tf.train.shuffle_batch 或者 tf.train.batch 函数读取数据
"""
在shuffle_batch 函数中,有几个参数的作用如下:
capacity: 队列的容量,容量越大的话,shuffle 得就更加均匀,但是占用内存也会更多
num_threads: 读取进程数,进程越多,读取速度相对会快些,根据个人配置决定
min_after_dequeue: 保证队列中最少的数据量。假设我们设定了队列的容量C,在我们取走部分数据m以后,队列中只剩下了 (C-m) 个数据。然后队列会不断补充数据进来,如果后勤供应(CPU性能,线程数量)补充速度慢的话,那么下一次取数据的时候,可能才补充了一点点,如果补充完后的数据个数少于min_after_dequeue 的话,不能取走数据,得继续等它补充超过 min_after_dequeue 个样本以后才让取走数据。这样做保证了队列中混着足够多的数据,从而才能保证 shuffle 取值更加随机。但是,min_after_dequeue 不能设置太大,否则补充时间很长,读取速度会很慢。
"""
X_batch, y_batch = tf.train.shuffle_batch([X_out, y_out], batch_size=2,capacity=200, min_after_dequeue=100, num_threads=2)
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)# **5.启动队列进行数据读取
# 下面的 coord 是个线程协调器,把启动队列的时候加上线程协调器。
# 这样,在数据读取完毕以后,调用协调器把线程全部都关了。
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
y_outputs = list()
for i in xrange(5):_X_batch, _y_batch = sess.run([X_batch, y_batch])print('** batch %d' % i)print('_X_batch:', _X_batch)print('_y_batch:', _y_batch)y_outputs.extend(_y_batch.tolist())
print(y_outputs)# **6.最后记得把队列关掉
coord.request_stop()
coord.join(threads)

TensorFlow入门(十-I)tfrecord 固定维度数据读写相关推荐

  1. 2021年大数据Hadoop(十):HDFS的数据读写流程

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 HDFS的数据读写流程 ...

  2. TensorFlow入门教程:8:训练数据之Iris数据集

    Irises,闻名于世的不只是梵高那副价值超过5000万美元的鸢尾花,同时还有Iris数据集. Iris数据集由英国统计学家/生物学家Ronald Fisher在1936年所收集,共包含150条数据, ...

  3. TensorFlow入门教程:14:噪声数据: 随机分布

    前面的文章中主要就线性回归进行了模拟,这篇文章重点讨论一下学习和训练过程中训练数据的问题. 前文中y=3*x + 1的训练数据,直接使用的数据是完全符合的数据,没有任何误差,散点信息如下所示: 绘图代 ...

  4. Tensorflow基础入门十大操作总结

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:李祖贤,Datawhale高校群成员,深圳大学 TensorFlo ...

  5. TensorFlow学习笔记——使用TFRecord进行数据保存和加载

    本篇文章主要介绍如何使用TensorFlow构建自己的图片数据集TFRecord的方法,并使用最新的数据处理Dataset API进行操作. TFRecord TFRecord数据文件是一种对任何数据 ...

  6. TFRecord存储维度(秩、rank、dimension)较多的数据以及创建Dataset的过程

    TFRecord存储维度(秩.rank.dimension)较多的数据以及创建Dataset的过程 第一次接触tensorflow的Dataset和Estimator是在阅读BERT的特定任务的代码, ...

  7. (转)tensorflow入门教程(二十六)人脸识别(上)

    https://blog.csdn.net/rookie_wei/article/details/81676177 1.概述 查看全文 http://www.taodudu.cc/news/show- ...

  8. 《Python编程:从入门到实践》第十六章:下载数据

    下载数据 我们将访问并可视化以两种常见格式存储的数据:CSV和JSON.我们将使用Python模块csv来处理以CSV(逗号分隔的值)格式存储的天气数据,找出两个不同地区在一段时间内的最高温度和最低温 ...

  9. TensorFlow构建模型(TFRecord)十

    概要 TFRecord是一种存储二进制记录数据的简单格式.协议缓存是一个有效序列化结构化数据的跨平台.跨语言库,协议信息被.proto文件定义,它们常常是理解信息类型最简单的方法. tf.train. ...

最新文章

  1. Spring事务异常回滚,捕获异常不抛出就不会回滚
  2. python中深拷贝和浅拷贝_**Python中的深拷贝和浅拷贝详解
  3. DOM(二)使用DOM
  4. python asyncio_python asyncio(一)
  5. hive sql 报错后继续执行_Hive优化之Spark执行引擎参数调优(二)
  6. Android开发实践:线程与异步任务
  7. Struts2之自定义转换器
  8. 次小生成树的某些结论及其算法O(V^2)
  9. shell历史命令记录功能
  10. java-高级编程课-实验题集标答整理
  11. 动态时间规整—DTW算法
  12. 福州铁通DNS是多少
  13. oracle dbms_lob trim,Oracle - DBMS_LOB函数和用法
  14. 基于android平台的语音机器人服务娱乐系统
  15. AprilTag中的apriltag.c文件
  16. 7000 位程序员揭秘 2019 软件开发现状
  17. 2021年煤矿井下爆破考试内容及煤矿井下爆破考试资料
  18. ROS入门之Publisher的创建
  19. 全局变量和静态变量以及内存堆栈的关系
  20. 超高压SiC功率器件GENESIC的6500V碳化硅晶闸管SCR模块GA060TH65

热门文章

  1. “猝死”,我离你有多远
  2. Ubuntu系统无线网卡驱动一键安装(告别繁琐安装和盲目安装)
  3. 【234期】新来的同事问我 where 1=1 是什么意思?
  4. 我的世界java雪村种子_我的世界:矿洞和村庄的种子已经过时了,这个冰雪世界了解下?...
  5. 【CKA考试笔记】十五、安全管理:验证与授权
  6. 左外连接、右外连接、全连接
  7. Jupyter启动和快捷键大全
  8. 三大运营商的网络制式
  9. 使用 Rust 语言开发 Erlang NIF
  10. linux从u盘挂载yum源,yum源制作、U盘做yum源