TensorFlow提供了一种TFRecords的格式来统一存储数据。理论上,TFRecords可以存储任何形式的数据 , TFRecords文件的是以tf.train.Example Protocol Buffer的格式存储的。以下的代码给出了tf.train.Example的数据结构:

    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;}};
首先介绍一下我接下来要展示给大家的工程结构(使用的IDE是 pycharm 2017 community):

接下来代码分三个文件, 分别是 加载数据 prepare_data.py ,制作tfrecords文件 make_data.py, 读取tfrecords文件read_data.py。

1.prepare_data.py

下面代码中数据增强部分我就略过了,可以参考tensorflow数据增强

# -*- coding: utf-8 -*-
import os
import cv2
import numpy as npdir = "imgs/"  # 加载jpg, testShape = (333, 500, 3)def data_augmentation(data):"""数据增强处理:param data::return: """return datadef get_img_data(file_dir):"""获取图片数据, 返回类型是 list:param file_dir: 图片所在目录:return: 返回类型是 list"""files = [os.path.join('imgs', x) for x in os.listdir(file_dir)]raw_data = [cv2.imread(img) for img in files]raw_data = data_augmentation(raw_data)return raw_dataif __name__ == "__main__":get_img_data(dir)
  1. make_data.py
# _*_ coding: utf-8 _*_import tensorflow as tf
import numpy as npfrom prepare_data import get_img_data# tfrecords 支持的数据类型
# tf.train.Feature(int64_list = tf.train.Int64List(value=[int_scalar]))
# tf.train.Feature(bytes_list = tf.train.BytesList(value=[array_string_or_byte]))
# tf.train.Feature(bytes_list = tf.train.FloatList(value=[float_scalar]))# 创建tfrecords文件
file_nums = 2
instance_per_file = 5
dir = "imgs/"data = get_img_data(dir)  # type(data) list
for i in range(file_nums):tfrecords_filename = './tfrecords/train.tfrecords-%.5d-of-%.5d' % (i, file_nums)writer = tf.python_io.TFRecordWriter(tfrecords_filename)  # 创建.tfrecord文件for j in range(instance_per_file):# type(data[i*instance_per_file+j]) numpy.ndarrayimg_raw = np.asarray(data[i*instance_per_file+j]).tostring()example = tf.train.Example(features=tf.train.Features(feature={'label': tf.train.Feature(int64_list=tf.train.Int64List(value=[j])),'img_raw': tf.train.Feature(bytes_list=tf.train.BytesList(value=[img_raw]))}))writer.write(example.SerializeToString())writer.close()
  1. read_data.py
import tensorflow as tf
import numpy as np
import cv2
import matplotlib.pyplot as plt# 读取tfrecords文件
# --------------hyperParams--------------------------
batch_size = 2
capacity = 1000 + 3*batch_size
train_rounds = 3
num_epochs = 30
img_h = 333
img_w = 500
# ---------------------------------------------------tfrecord_files = tf.train.match_filenames_once('./tfrecords/train.tfrecords-*')
queue = tf.train.string_input_producer(tfrecord_files, num_epochs=num_epochs, shuffle=True, capacity=10)reader = tf.TFRecordReader()
# 从文件中读出一个队列, 也可以使用read_uo_to函数一次性读取多个样例
_, serialized_example = reader.read(queue)# 读取多个对应tf.parse_example()
# 读取单个对应tf.parse_single_example()features = tf.parse_single_example(serialized_example, features={'label': tf.FixedLenFeature([], tf.int64),'img_raw': tf.FixedLenFeature([], tf.string),}
)image = tf.decode_raw(features['img_raw'], tf.uint8)
# image_shape = tf.stack([img_h, img_w, 3])
image = tf.reshape(image, [img_h, img_w, 3])
label = tf.cast(features['label'], tf.int64)# tf.train.shuffle_batch()
to_train_batch, to_label_batch = tf.train.shuffle_batch([image, label], batch_size=batch_size, capacity=capacity,allow_smaller_final_batch=True, num_threads=1, min_after_dequeue=1
)with tf.Session() as sess:sess.run(tf.group(tf.local_variables_initializer(), tf.global_variables_initializer()))coord = tf.train.Coordinator()threads = tf.train.start_queue_runners(sess=sess, coord=coord)for i in range(train_rounds):train_batch, label_batch = sess.run([to_train_batch, to_label_batch])plt.subplot(121)plt.imshow(train_batch[0])plt.subplot(122)plt.imshow(train_batch[1])plt.show()coord.request_stop()coord.join(threads)print('finish all')
# 下图是read_data.py 读取 tfrecords 的结果:

tensorflow 标准数据读取 tfrecords相关推荐

  1. 由浅入深之Tensorflow(3)----数据读取之TFRecords

    由浅入深之Tensorflow(3)----数据读取之TFRecords 转载自http://blog.csdn.net/u012759136/article/details/52232266 原文作 ...

  2. Tensorflow分批量读取tfrecords

    Tensorflow分批量读取数据 之前的博客里使用tf读取数据都是每次fetch一条记录,实际上大部分时候需要fetch到一个batch的小批量数据,在tf中这一操作的明显变化就是tensor的ra ...

  3. TensorFlow——二进制数据读取

    一.CIFAR10二进制数据集介绍 https://www.cs.toronto.edu/~kriz/cifar.html 二进制版本数据文件 二进制版本包含文件data_batch_1.bin,da ...

  4. 『TensorFlow』数据读取类_data.Dataset

    一.资料 参考原文: TensorFlow全新的数据读取方式:Dataset API入门教程 API接口简介: TensorFlow的数据集 二.背景 注意,在TensorFlow 1.3中,Data ...

  5. tensorflow的数据读取 tf.data.DataSet、tf.data.Iterator

    tensorflow的工程有使用python的多进程读取数据,然后给feed给神经网络进行训练. 也有tensorflow中的 tf.data.DataSet的使用.并且由于是tensorflow框架 ...

  6. TensorFlow中数据读取—如何载入样本

    考虑到要是自己去做一个项目,那么第一步是如何把数据导入到代码中,何种形式呢?是否需要做预处理?官网中给的实例mnist,数据导入都是写好的模块,那么自己的数据呢? 一.从文件中读取数据(CSV文件.二 ...

  7. linux 读取大量图片 内存,10 张图帮你搞定 TensorFlow 数据读取机制

    导读 在学习tensorflow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找不到什么合适的学习材料.今天这篇文章就以图片的形式,用最简单的语言,为大家详细解 ...

  8. tensorflow 1.0 学习:十图详解tensorflow数据读取机制

    本文转自:https://zhuanlan.zhihu.com/p/27238630 在学习tensorflow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找 ...

  9. 十图详解TensorFlow数据读取机制(附代码)

    在学习TensorFlow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找不到什么合适的学习材料.今天这篇文章就以图片的形式,用最简单的语言,为大家详细解释一下 ...

最新文章

  1. func_num_args()
  2. Attention函数手册
  3. Spring定时任务的几种实现方式
  4. 程序员应该了解的几个接单平台,私活,码农!
  5. centos svn 的搭建
  6. ASP.NET Core + Docker + Jenkins + gogs + CentOS 从零开始搭建持续集成
  7. C++智能指针使用指南 part2:智能指针本身的方法以及使用建议
  8. synchronized原理_synchronized 底层原理与内存屏障
  9. JavaScript中带有示例的Math.abs()方法
  10. 压缩包安装_SPSS 21 下载(内附压缩包及安装过程)
  11. DSP28335笔记——系统时钟 和 GPIO
  12. 顺序结构程序设计总结
  13. 读书行动笔记2013第2本:《整理的艺术》
  14. ccy测试dlx 模块化与全局变量
  15. ORA-01830: date format picture ends before converting entire input string的几种原因
  16. 《听读书怪才解读24部名人传记》笔记
  17. 1.7.10服务器物品编辑器,我的世界背包编辑器1.7.10
  18. echarts rich设置动态图片/动态数据;echarts 人均收入柱状图 window系统显示不出国旗;echarts动态rich
  19. SPDR年内增量尽数被抹 市场看空金市
  20. 服务器如何测试网速?服务器测试带宽常用方法分享

热门文章

  1. Effective Java之避免使用受检的异常(五十九)
  2. 剑指 offer 编程题 C++ 版总结(下)
  3. oracle数据库开多线程,学习笔记:Oracle表数据导入 DBA常用单线程插入 多线程插入 sql loader三种表数据导入案例...
  4. Juniper 210 密码清不掉_三分钟学会如何找回mysql密码
  5. js代码转python_Python和JavaScript间代码转换的4个工具
  6. cas 注销不关闭浏览器异常_如何关闭华为手机这些“流氓”推送?
  7. 服务器维护以后只有辅助能进,通过服务器信息维护进行“半自动化”运维
  8. 2021年东港二中高考成绩查询,辽宁省东港二中2021届英语高考模拟试卷1(新课改原创2020版,供2021年课改省份考生使用)...
  9. left join on多表关联_资深DBA整理MySQL基础知识三:迅速理解MySQL的关联和子查询...
  10. 计算机英语句子缩略,根据汉语意思完成英语句子,每空一词(含缩略形式)。 【1】-咋考网...