前言

在TensorFlow中进行模型训练时,在官网给出的三种读取方式,中最好的文件读取方式就是将利用队列进行文件读取,而且步骤有两步:
1. 把样本数据写入TFRecords二进制文件
2. 从队列中读取

TFRecords二进制文件,能够更好的利用内存,更方便的移动和复制,并且不需要单独的标记文件
下面官网给出的,对mnist文件进行操作的code,具体代码请参考:tensorflow-master\tensorflow\examples\how_tos\reading_data\convert_to_records.py

CODE

源码与解析

解析主要在注释里

import tensorflow as tf
import os
import argparse
import sysos.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'#1.0 生成TFRecords 文件
from tensorflow.contrib.learn.python.learn.datasets import mnistFLAGS = None# 编码函数如下:
def _int64_feature(value):return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))def _bytes_feature(value):return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))def convert_to(data_set, name):"""Converts a dataset to tfrecords."""images = data_set.imageslabels = data_set.labelsnum_examples = data_set.num_examplesif images.shape[0] != num_examples:raise ValueError('Images size %d does not match label size %d.' %(images.shape[0], num_examples))rows = images.shape[1] # 28cols = images.shape[2] # 28depth = images.shape[3] # 1. 是黑白图像,所以是单通道filename = os.path.join(FLAGS.directory, name + '.tfrecords')print('Writing', filename)writer = tf.python_io.TFRecordWriter(filename)for index in range(num_examples):image_raw = images[index].tostring()# 写入协议缓存区,height,width,depth,label编码成int64类型,image_raw 编码成二进制example = tf.train.Example(features=tf.train.Features(feature={'height': _int64_feature(rows),'width': _int64_feature(cols),'depth': _int64_feature(depth),'label': _int64_feature(int(labels[index])),'image_raw': _bytes_feature(image_raw)}))writer.write(example.SerializeToString()) # 序列化为字符串writer.close()def main(unused_argv):# Get the data.data_sets = mnist.read_data_sets(FLAGS.directory,dtype=tf.uint8,reshape=False,validation_size=FLAGS.validation_size)# Convert to Examples and write the result to TFRecords.convert_to(data_sets.train, 'train')convert_to(data_sets.validation, 'validation')convert_to(data_sets.test, 'test')if __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('--directory',type=str,default='MNIST_data/',help='Directory to download data files and write the converted result')parser.add_argument('--validation_size',type=int,default=5000,help="""\Number of examples to separate from the training data for the validationset.\""")FLAGS, unparsed = parser.parse_known_args()tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)

运行结果

打印输出

Extracting MNIST_data/train-images-idx3-ubyte.gz
Extracting MNIST_data/train-labels-idx1-ubyte.gz
Extracting MNIST_data/t10k-images-idx3-ubyte.gz
Extracting MNIST_data/t10k-labels-idx1-ubyte.gz
Writing MNIST_data/train.tfrecords
Writing MNIST_data/validation.tfrecords
Writing MNIST_data/test.tfrecords

文件

相关

  1. argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。argparse模块的作用是用于解析命令行参数,详情请参见这里:python中的argparse模块:http://blog.csdn.net/fontthrone/article/details/76735591
  2. 把样本数据写入TFRecords二进制文件 : http://blog.csdn.net/fontthrone/article/details/76727412
  3. TensorFlow笔记(基础篇):加载数据之预加载数据与填充数据:http://blog.csdn.net/fontthrone/article/details/76727466
  4. TensorFlow笔记(基础篇):加载数据之从队列中读取:http://blog.csdn.net/fontthrone/article/details/76728083

7.2 TensorFlow笔记(基础篇): 生成TFRecords文件相关推荐

  1. 7.3 TensorFlow笔记(基础篇):加载数据之从队列中读取

    前言 整体步骤 在TensorFlow中进行模型训练时,在官网给出的三种读取方式,中最好的文件读取方式就是将利用队列进行文件读取,而且步骤有两步: 1. 把样本数据写入TFRecords二进制文件 2 ...

  2. 7.1 TensorFlow笔记(基础篇):加载数据之预加载数据与填充数据

    TensorFlow加载数据 TensorFlow官方共给出三种加载数据的方式: 1. 预加载数据 2. 填充数据 预加载数据的缺点: 将数据直接嵌在数据流图中,当训练数据较大时,很消耗内存.填充的方 ...

  3. 6.1 Tensorflow笔记(基础篇):队列与线程

    前言 在Tensorflow的实际应用中,队列与线程是必不可少,主要应用于数据的加载等,不同的情况下使用不同的队列,主线程与其他线程异步进行数据的训练与读取,所以队列与线程的知识也是Tensorflo ...

  4. 1.1 Tensorflow笔记(基础篇): 图与会话,变量

    图与会话 import tensorflow as tf import os# 取消打印 cpu,gpu选择等的各种警告 # 设置TF_CPP_MIN_LOG_LEVEL 的等级,1.1.0以后设置2 ...

  5. Google Map 开发笔记——基础篇(Javascript )

    Google Map 开发笔记--基础篇 说明: 一.使用入门: 1.在您需要显示地图的 html 页面嵌入这段 script 2.地图 DOM 元素 3.初始化地图 二.地图画点.线.面 1.标记( ...

  6. MySQL学习笔记-基础篇2

    MySQL学习笔记-基础篇2 目录 MySQL学习笔记-基础篇2 8.子查询 8.1 需求分析与问题解决 8.1.1 实际问题 8.1.2 子查询的基本使用 8.1.3 子查询的分类 8.2 单行子查 ...

  7. 小猪猪C++笔记基础篇(四)数组、指针、vector、迭代器

    小猪猪C++笔记基础篇(四) 关键词:数组,Vector. 一.数组与指针 数组相信大家学过C语言或者其他的语言都不陌生,简单的就是同一个变量类型的一组数据.例如:int a[10],意思就是从a开始 ...

  8. 小何同学的leetcode刷题笔记 基础篇(01)整数反转

    小何同学的leetcode刷题笔记 基础篇(01)整数反转[07] *** [01]数学取余法*** 对数字进行数位操作时,常见的方法便是用取余的方法提取出各位数字,再进行操作 操作(1):对10取余 ...

  9. MySQL学习笔记-基础篇1

    MySQL 学习笔记–基础篇1 目录 MySQL 学习笔记--基础篇1 1. 数据库概述与MySQL安装 1.1 数据库概述 1.1.1 为什么要使用数据库 1.2 数据库与数据库管理系统 1.2.1 ...

最新文章

  1. vue 根据后台数据 判断显示_【开源】el-admin 后台管理系统,v1.9 发布
  2. Pycharm设置pylint real-time scan实时扫描代码规范
  3. SizeOf与Structure与Managed Code
  4. 我的Python脚本——生成任意波形并存为txt
  5. 部署项目到jetty
  6. 分布式团队_我们说的意思是:我们是一个分布式优先团队
  7. 表格状态列_不用软件也能做好多个项目跟进管理?我用一个协同表格就搞定
  8. python image清除_60秒掌握Python内置模块Turtle的用法——绘制漫天雪花
  9. 重磅炸弹!马云正式宣布:1天1个亿,全世界沸腾了!
  10. UEA1224——郭恩赐 day06 作业
  11. 【十次方】十次方项目前期准备
  12. android: 怎么使用腾讯X5WebView
  13. 微信api接口调用-触发推送微信群聊列表
  14. 科学计算机壁纸,Nature大盘点:2020年最佳科学影像,每一张都是壁纸,每一张都是历史...
  15. Adobe Photoshop 2021 22.4.3 中英文+Neural Filters 含神经滤镜 下载
  16. 聪明的kk nyoj 171
  17. ansible 变量
  18. java pdf转 图片
  19. 计算机操作系统经典进程同步问题
  20. Response Header里的Server,X-Powered-By,X-AspNet-Version字段等敏感信息删除

热门文章

  1. 【转载】谁记录了mysql error log中的超长信息
  2. 笔记本移动位置,切换网络ip后,虚拟机的mac系统无法联网解决
  3. (二)微服务分布式云架构 - spring cloud整合企业架构的技术点
  4. 对比云备份:企业做出最佳选择
  5. MTP 多媒体传输协议
  6. 闲鱼靠什么支撑起万亿的交易规模?| 云原生Talk
  7. JVM面试问题系列:JVM 配置常用参数和常用 GC 调优策略
  8. Nginx基础——Rewrite规则
  9. 数据中心如何建设,数据中心机房维护方法详解!
  10. Gartner:基础设施和运营领域10大技术趋势