先介绍一下TensorFlow自带的数据格式:

TensorFlow自带一种数据格式叫做tfrecords。 你可以把你的输入转成专属与TensorFlow的tfrecords格式并保存在本地。

-关于输入碎碎念:输入比如图片,可以有各种格式呀首先你从网上下载到的一般是png或者jpg格式的吧, 你可以把它存成一个矩阵的形式(numpy ndarray),如果不用TensorFlow自带的tfrecords,你其实也可以存成python独有的pickle文件哈。

那么要怎样把数据存成tfrecords呢?

当然是用TensorFlow api库啦,就是下面这个Class:

tf.python_io.TFRecordWriter

__init__(self, path, options=None)
Opens file `path` and creates a `TFRecordWriter` writing to it.
Args:
path: The path to the TFRecords file.
options: (optional) A TFRecordOptions object.

在参数列表里指明你想要存放的路径。

tf.python_io.TFRecordWriter('SVHN/train.tfrecords')

虽然有一点没逻辑,但是我还是要介绍一下在处理图片数据输入需要用到的一个TensorFlow Class:

class GFile(tensorflow.python.lib.io.file_io.FileIO)

这是一个用来处理文件IO的类,它包含一个类似正则的查找匹配的函数我们可以用它来找到我们想要的文件->tf.gfile.Glob

它返回一个包含所有满足条件元素的列表。

初始化一个TFRecordWriter完成后,就等于知道了tfrecords的存放路径,接下来就要往这个文件中存数据呀!这里用到了这个类的write函数。

tf.python_io.TFRecordWriter
write(self, record)
Write a string record to the file.
Args:
record: str

当要读取tfrecords中的数据时,要做以下的事情:

首先呢需要一个pipeline,然后需要将tfrecords的存放路径作为一个str放入到一个queue中。string_input_producer这个函数负责完成这件事。

string_input_producer(string_tensor, num_epochs=None, shuffle=True, seed=None, capacity=32, shared_name=None, name=None, cancel_op=None)
Output strings (e.g. filenames) to a queue for an input pipeline.

这个函数需要传入一个文件名list,系统会自动将它转为一个文件名队列。

tf.train.string_input_producer还有两个重要的参数,一个是num_epochs,它就epoch数。另外一个就是shuffle,shuffle是指在一个epoch内文件的顺序是否被打乱。

在tensorflow中,内存队列不需要我们自己建立,我们只需要使用reader对象从文件名队列中读取数据就可以了。

类似的TensorFlow有相对应的TFRecordReader类来读取。

class TFRecordReader(ReaderBase)
A Reader that outputs the records from a TFRecords file
__init__(self, name=None, options=None)
Create a TFRecordReader.
Args:
name: A name for the operation (optional).
options: A TFRecordOptions object (optional).

初始化一个TFRecordWriter完成后,接下来就要往这个文件中读数据呀!这里用到了这个类的read函数。

read(self, queue, name=None)
Returns the next record (key, value) pair produced by a reader. Will dequeue a work unit from queue if necessary (e.g. when the
Reader needs to start reading from a new file since it has
finished with the previous file). Args:
queue: A Queue or a mutable string Tensor representing a handle
to a Queue, with string work items.
name: A name for the operation (optional). Returns:
A tuple of Tensors (key, value).
key: A string scalar Tensor.
value: A string scalar Tensor.

当要读取整个文件的时候,也可以使用WholeFileReader这个阅读器。它是TensorFlow提供的一个类。
class tf.WholeFileReader

一个阅读器,读取整个文件,返回文件名称key,以及文件中所有的内容value。

创建阅读器之后,要从文件名队列中读取文件。

read(queue, name=None) method of tensorflow.python.ops.io_ops.WholeFileReader instance
Returns the next record (key, value) pair produced by a reader.

返回下一个文件名称key和文件中所有内容的value。

Will dequeue a work unit from queue if necessary (e.g. when the
Reader needs to start reading from a new file since it has
finished with the previous file).
如果需要,会从队列中出队一个单元。读取器在完成上一个文件后,继续读取下一个文件。

Args:
queue: A Queue or a mutable string Tensor representing a handle
to a Queue, with string work items.
name: A name for the operation (optional).

Returns:
A tuple of Tensors (key, value).
key: A string scalar Tensor.
value: A string scalar Tensor.

关于TensorFlow的读取机制:

转载于https://zhuanlan.zhihu.com/p/27238630

什么是数据读取?假设我们的硬盘中有一个图片数据集0001.jpg,0002.jpg,0003.jpg……我们只需要把它们读取到内存中,然后提供给GPU或是CPU进行计算。

读取线程源源不断地将文件系统中的图片读入到一个内存的队列中,而负责计算的是另一个线程,计算需要数据时,直接从内存队列中取就可以了。这样就可以解决GPU因为IO而空闲的问题!

而在tensorflow中,为了方便管理,在内存队列前又添加了一层所谓的“文件名队列”。

为什么要添加这一层文件名队列?我们首先得了解机器学习中的一个概念:epoch。对于一个数据集来讲,运行一个epoch就是将这个数据集中的图片全部计算一遍。

TensorFlow-谷歌深度学习库 用tfrecord写入读取的更多相关文章

  1. Keras:基于Theano和TensorFlow的深度学习库

    catalogue . 引言 . 一些基本概念 . Sequential模型 . 泛型模型 . 常用层 . 卷积层 . 池化层 . 递归层Recurrent . 嵌入层 Embedding 1. 引言 ...

  2. TensorFlow-谷歌深度学习库 手把手教你如何使用谷歌深度学习云平台

    自己的电脑跑cnn, rnn太慢? 还在为自己电脑没有好的gpu而苦恼? 程序一跑一俩天连睡觉也要开着电脑训练? 如果你有这些烦恼何不考虑考虑使用谷歌的云平台呢?注册之后即送300美元噢-下面我就来介 ...

  3. windows下Anaconda3配置TensorFlow深度学习库

    Anaconda3(python3.6)安装tensorflow Anaconda3中安装tensorflow3是非常简单的,仅需通过 pip install tensorflow 测试代码: imp ...

  4. 人工智能不过尔尔,基于Python3深度学习库Keras/TensorFlow打造属于自己的聊天机器人(ChatRobot)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_178 聊天机器人(ChatRobot)的概念我们并不陌生,也许你曾经在百无聊赖之下和Siri打情骂俏过,亦或是闲暇之余与小爱同学谈 ...

  5. 30个深度学习库:按Python、C++、Java、JavaScript、R等10种语言分类

    30个深度学习库:按Python.C++.Java.JavaScript.R等10种语言分类 包括 Python.C++.Java.JavaScript.R.Haskell等在内的一系列编程语言的深度 ...

  6. TensorFlow和深度学习入门教程(TensorFlow and deep learning without a PhD)【转】

    本文转载自:https://blog.csdn.net/xummgg/article/details/69214366 前言 上月导师在组会上交我们用tensorflow写深度学习和卷积神经网络,并把 ...

  7. TensorFlow和深度学习新手教程(TensorFlow and deep learning without a PhD)

    前言 上月导师在组会上交我们用tensorflow写深度学习和卷积神经网络.并把其PPT的參考学习资料给了我们, 这是codelabs上的教程:<TensorFlow and deep lear ...

  8. Kelp.Net是一个用c#编写的深度学习库

    Kelp.Net是一个用c#编写的深度学习库 基于C#的机器学习--c# .NET中直观的深度学习   在本章中,将会学到: l  如何使用Kelp.Net来执行自己的测试 l  如何编写测试 l  ...

  9. 深度学习库 SynapseML for .NET 发布0.1 版本

    2021年11月 微软开源一款简单的.多语言的.大规模并行的机器学习库 SynapseML(以前称为 MMLSpark),以帮助开发人员简化机器学习管道的创建.具体参见[1]微软深度学习库 Synap ...

随机推荐

  1. 利用Eclipse中的Maven构建Web项目报错(二)

    利用Eclipse中的Maven构建Web项目 1.错误描述 [INFO] Scanning for projects... [INFO] [INFO] Using the builder org.a ...

  2. 芝麻HTTP:一个采集系统的构建

    整个系统: 采集系统:

  3. CF367 E - Working routine

    十字链表模拟 #include<bits/stdc++.h> using namespace std; int n,m,q; struct Node{ int v; int d,r; }m ...

  4. 网络协议笔记-网络层-ARP协议

    [2-地址解析协议ARP] [2.1-基本概念] 地址解析协议ARP的作用是根据主机的IP地址,找出该主机的硬件地址. [2.2-为什么要使用ARP] 在数据传输过程中,网络层使用的IP地址,但是在实 ...

  5. dom文档对象模型图

  6. MFC与Webbrower交互(通过JS)

    最近修改老旧的MFC项目,用的网页做界面,和HTML交互采用的是COM方式,繁琐,丑陋又性能低,于是考虑利用js来进行界面交互,查了一天的资料,现在整理如下,供后来需要的人参考,虽然大概几乎不会有人用 ...

  7. JavaScript设计模式(4)-桥接模式

    桥接模式 在设计一个 Js API 时,可用来弱化它与使用它的类和对象之间的耦合 1. 事件监听器的回调函数 function getBeerById(id, callback) { asyncReq ...

  8. C#图解教程 第二十章 异步编程

    笔记 异步编程 什么是异步 示例 async/await特性的结构什么是异步方法 异步方法的控制流await表达式取消一个异步操作异常处理和await表达式在调用方法中同步地等待任务在异步方法中异步地 ...

  9. SAXParser解析xml文件

    对于xml的解析,这里学习并演示使用SAXParser进行解析的样例. 使用此种方法无法解析"gb2312"编码的xml文件,因此,此处xml文件编码设置为"UTF-8& ...

  10. 【洛谷1855】 榨取kkksc03

    题面 前面省去一堆背景内容 洛谷的运营组决定,如果一名oier向他的教练推荐洛谷,并能够成功的使用(成功使用的定义是:该团队有20个或以上的成员,上传10道以上的私有题目,布置过一次作业并成功举办过一 ...