tensorflow数据集制作/文件队列读取方式

tensorflow数据读取之tfrecords 掌握一个深度学习框架的用法,从训练一个模型的流程来看,需要掌握以下几个步骤: 1. 数据的处理,包括训练数据转成网络的输入,模型参数的存储与读取 2. 网络结构的定义,包括网络主体的搭建以及loss的定义 3. solver的定义,也就是如何对网络进行优化 4. 模型评估的定义,也就是对模型训练结果进行评测这篇博文主要介绍第一部分,数据处理中的训练数据读取部分 tensorflow当中读取 阅读详情

3种数据读取方式

TensorFlow程序读取数据一共有3种方法:
供给数据(Feeding): 在TensorFlow程序运行的每一步, 让Python代码来供给数据。
从文件读取数据: 在TensorFlow图的起始, 让一个输入管线从文件中读取数据。
预加载数据: 在TensorFlow图中定义常量或变量来保存所有数据(仅适用于数据量比较小的情况)。

以上3种方式官网中均有介绍
1. input = tf.placeholder(tf.float32) feed方式,先定义一个占位符,需要sess.run()的时候把数据传进去。
3.预加载,如下,讲数据保存在常量中,这个方法对于大数据不合适,内存资源不够。

training_data = ...
training_labels = ...
with tf.Session():
  input_data = tf.constant(training_data)
  input_labels = tf.constant(training_labels)

文件读取方式

使用原因:例如图片分类场景中,我们要使用自己的数据集,数据集比较大,需要动态的去添加数据,这样可以使用占位符,也可以利用文件读取的方式,这种方式更方便。下面我们介绍文件读取方式。(这里特别补充一个问题,队列是用来解决gpu空闲和内存问题的。所有的图片同时读到内存中是非常大的,内存可能承受不了,有了队列之后,每一次都从队列加载到内存队列中,这样就可以添加比较大的图片了。http://geek.youkuaiyun.com/news/detail/201552 详解TENSORFLOW读取机制)

官网中给出的一般步骤
一共典型的文件读取管线会包含下面这些步骤:
`文件名列表
`可配置的 文件名乱序(shuffling)
`可配置的 最大训练迭代数(epoch limit)
`文件名队列
`针对输入文件格式的阅读器
`纪录解析器
`可配置的预处理器
`样本队列

这里介绍使用tensorflow的二进制格式来处理,一是因为这个二进制文件操作方便,而且网上有比较通用的处理流程,2是利用图片生成方便,200M的二进制文件可以很快速的生成,但是如果是csv文件的话,生成速度特别慢,而且200M的excel也打不开的。。(亲测)所以还是用二进制文件吧!

一下假设有了二进制文件,先别急,后面我会告诉大家如何去制作一个属于自己的数据集!

具体的队列描述,参考官网即可,我也没太看懂。
http://www.tensorfly.cn/tfdoc/how_tos/reading_data.html#AUTOGENERATED-preloaded-data
TensorFlow提供了两个类来帮助多线程的实现:tf.Coordinator和 tf.QueueRunner。从设计上这两个类必须被一起使用。Coordinator类可以用来同时停止多个工作线程并且向那个在等待所有工作线程终止的程序报告异常。QueueRunner类用来协调多个工作线程同时将多个张量推入同一个队列中。QueueRunner类会创建一组线程, 这些线程可以重复的执行Enquene操作, 他们使用同一个Coordinator来处理线程同步终止。

basePath = '/home/user/xxxxx'

classes = {'c1','c2'}
#生成数据集
def create_record():
    writer = tf.python_io.TFRecordWriter("train.tfrecords")
    for index, name in enumerate(classes):
        class_path = basePath +"/"+ name+"/"
        for img_name in os.listdir(class_path):
            img_path = class_path + img_name
            img = Image.open(img_path)
            img = img.resize((320, 240))
            img_raw = img.tobytes() #将图片转化为原生bytes
            #print index,img_raw

            example = tf.train.Example(
                features=tf.train.Features(
                    feature={
                        "label": tf.train.Feature(int64_list=tf.train.Int64List(value=[index])),
                        'img_raw': tf.train.Feature(bytes_list=tf.train.BytesList(value=[img_raw]))
                    }
                )
            )
            writer.write(example.SerializeToString())
    writer.close()

#读取二进制数据
img, label = read_and_decode("../train.tfrecords")
#分块处理,这里img_batch,就可以当做输入看待了,以后每次sess.run()相关操作都会取出一部分,此处相当于你自己写一个队列操作去feed x的数据。(个人理解)
img_batch, label_batch = tf.train.shuffle_batch([img, label],
                                            batch_size=4, capacity=2000,
                                            min_after_dequeue=1000)

#官网推荐处理模板
# Create the graph, etc.
init_op = tf.initialize_all_variables()

# Create a session for running operations in the Graph.
sess = tf.Session()

# Initialize the variables (like the epoch counter).
sess.run(init_op)

# Start input enqueue threads.
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)

try:
    while not coord.should_stop():
        # Run training steps or whatever
        sess.run(train_op)

except tf.errors.OutOfRangeError:
    print 'Done training -- epoch limit reached'
finally:
    # When done, ask the threads to stop.
    coord.request_stop()

# Wait for threads to finish.
coord.join(threads)
sess.close()

制作自己的数据集

思路:TFRecords文件。
获取这种格式的文件方式为,首先将一般的数据格式填入Example protocol buffer中,再将 protocol buffer序列化为一个字符串,然后使用tf.python_io.TFRecordWriter类的相关方法将字符串写入一个TFRecords文件中。

#制作二进制数据
def create_record():
    writer = tf.python_io.TFRecordWriter("train.tfrecords")
    for index, name in enumerate(classes):
        class_path = basePath +"/"+ name+"/"
        for img_name in os.listdir(class_path):
            img_path = class_path + img_name
            img = Image.open(img_path)
            img = img.resize((320, 240))
            img_raw = img.tobytes() #将图片转化为原生bytes
            #print index,img_raw

            example = tf.train.Example(
                features=tf.train.Features(
                    feature={
                        "label": tf.train.Feature(int64_list=tf.train.Int64List(value=[index])),
                        'img_raw': tf.train.Feature(bytes_list=tf.train.BytesList(value=[img_raw]))
                    }
                )
            )
            writer.write(example.SerializeToString())
    writer.close()

小问题

利用CNN分类的时候,出现了资源耗尽问题,网络铺的太大,显卡内存就用光了。mnist中使用28*28,我的图片320*240。主要原因来自于最后全连接层,参数过多。需要单独处理了!

Tensorflow数据集制作专题【三】— 将Excel文件制作成内存对象数据集 接下来我们来说一说, 如何将excel文件制作成内存对象数据集,这里我们准备两份数据,表格样式如下所示: ID Feature1 Feature2 Feature3 Feature4 label 1 0.5 0.3 3.5 5.6 1 2 3.3 2.5 6.3 7.4 2 3 3.5 ... 阅读详情

相关推荐

Tensorflow读取csv文件

前言:当深度学习使用的训练数据文件过大,使用pandas读取时会一次性读取全部数据,给内存带来了极大的压力。Tensorflow提供了一个使用队列且多线程读取文件的机制,缓解了内存的压力。该程序完整代码:https://github.com/iapcoder/TensorflowReadCSV 一 步骤: 1、构造文件队列 file_queue = tf.train.string_inpu...

wangTongGen 3983

TensorFlow读取数据的几种方法以及队列的使用

转自:https://www.cnblogs.com/zyly/p/8982335.html TensorFlow程序读取数据一共有3种方法: 供给数据(Feeding): 在TensorFlow程序运行的每一步, 让Python代码来供给数据。 从文件读取数据: 在TensorFlow图的起始, 让一个输入管道从文件中读取数据。 预加载数据: 在TensorFlow图中定义常量或变量来保...

duanyajun987的博客 1万+

使用tensorflow 输入队列读取 文件一行 时报错

input_queue = tf.train.string_input_producer([filenames_file], shuffle=False) line_reader = tf.TextLineReader() _, line = line_reader.read(input_queue) split_line = tf.string_split([line]).values cen...

guanxing_zhou的博客 2287

TensorFlow 实现简单的TextCNN(回归)

直接上代码,因为此前都是使用keras,所以在过程中有一些和keras的对比(主要是使用习惯的对比,不是性能)。import tensorflow as tf import pandas as pd import jieba import numpy as np当使用tensorflow的时候,要引用的包就很少了,就一个tensorflow就够用了,不像keras,需要从layers到activa...

coolkid09100的博客 3216

TensorFlow数据输入的方法示例

读取数据(Reading data) TensorFlow输入数据的方式有四种: tf.data API:可以很容易的构建一个复杂的输入通道(pipeline)(首选数据输入方式)(Eager模式必须使用该API来构建输入通道) Feeding:使用Python代码提供数据,然后将数据feeding到计算图中。 QueueRunner:基于队列的输入通道(在计算图计算前从队列中读取数据) Preloaded data:用一个constant常量将数据集加载到计算图中(主要用于小数据集) 1. tf.data API 关于tf.data.Dataset的更详尽解释请看《pro

Tensorflow使用tfrecord输入数据格式

Tensorflow 提供了一种统一的格式来存储数据,这个格式就是TFRecord,上一篇文章中所提到的方法当数据的来源更复杂,每个样例中的信息更丰富的时候就很难有效的记录输入数据中的信息了,于是Tensorflow提供了TFRecord来统一存储数据,接下来我们就来介绍如何使用TFRecord来同意输入数据的格式。 1. TFRecord格式介绍 TFRecord文件中的数据是通过tf.train.Example Protocol Buffer的格式存储的,下面是tf.train.Example的定义 message Example { Features features = 1; }

用Tensorflow实现CNN文本分类(详细解释及TextCNN代码解释)

本文转载自:http://www.dataguru.cn/forum.php?mod=viewthread&tid=637971&extra=page=1&page=1 Ox00: Motivation最近在研究Yoon Kim的一篇经典之作Convolutional Neural Networks for Sentence Classification,这篇文章可以说是cnn模型用于文

ch的专栏 4万+

Ubuntu升级遇到grub-efi-amd64-signed报错?3步搞定这个烦人的EFI目录问题

本文详细解析了Ubuntu系统升级时遇到的“grub-efi-amd64-signed”报错及“cannot find EFI directory”问题。通过剖析UEFI启动机制与EFI系统分区原理,提供了从诊断到修复的三步解决方案,帮助用户快速解决因EFI目录未挂载导致的升级中断,确保系统引导正常。

assembly8low的博客 585

制作tensorflow数据集

制作tensorflow数据集 目录制作tensorflow数据集1、场景需求2、制作方法3、附程序解释 1、场景需求 由于最近会有实验,需要记录大量数据,通过手工记录需要花费太多时间,效率很低,所以就寻找让程序自己记录并输入到文本的方法。由于记录的多数是数字,少量的中文字符,因此使用 Excel 或者记事本比较合适。 2、制作方法 1. 使用软件自带包进行记录,这里就不再叙述了。 2. 使用 C++对文件进行写入与读取 (1) 对 xls 文件直接进行操作 ① 写入操作:从当前格子跳入同一行相邻的格子,使

weixin_51512325的博客 1144

使用LoRa远程控制路灯(PWM调光以及LoRaWAN单播、组播、广播)

PWM调光 1、使用有pwm波输出的引脚,本例子使用timer0,PA0引脚; 2、由于timer时钟的原因,mcu不能进入休眠; 3、主控使用EFM32,代码实现如下: #define MAX_PULSE (CPU_FREQ/1000-1) #define UNIT_PULSE MAX_PULSE/100 //单位脉宽 void pwminit(void) { ...

freemote的博客 2944

定时移动鼠标点击鼠标,防止电脑息屏的vba脚本

定时移动鼠标,使系统始终处于激活状态,防止系统息屏。

panfei263031的博客 5932

TensorFlow读取自定义数据集(python版本)

以anime数据集为例: import multiprocessing import tensorflow as tf def batch_dataset(dataset, batch_size, drop_remainder=True, n_prefetch_batch=1, filter_fn=None, map_f

qq_15054345的博客 1049

麒麟OS(Kylin OS)操作系统minikube+docker安装使用及遇到的问题

一 ,安装minikube及操作工具kubectl 1,安装kubectl 使用以下命令下载最新版本: curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" 要下载指定版本(例如v1.22.0版本) ,请键入: curl -LO https://dl.k8s.io/release/v1.22.0/bin/linux/amd..

qq_23396017的博客 2643

TensorFlow制作自己的数据集,并用神经网络来训练自己制作的数据集【上】

在用tensorflow来进行网络模型的训练时,我们总是需要先输入数据,这样才能对网络模型进行训练。这就涉及将数据导入TensorFlow的问题了 总共有四种方法将数据导入到TensorFlow中: 使用数据集API,这是将数据集导入tensorflow最常用的办法 Feeding,python的代码在运行每个步骤时提供数据 从文件读取,输入管道从tensorflow图的开始处读取文件中的数据 预加载数据,tensorflow图中的常量或变量保存所有数据(对于小型数据集) 在这里我们使用第三种方法,将自

qq_43723025的博客 6216

HTTPS接口测试翻车实录:为什么浏览器能访问而curl报证书错误?

本文深入分析了HTTPS接口测试中浏览器访问正常而curl报证书错误的典型问题。通过对比浏览器、Postman和curl的工具行为差异,结合Nginx日志与Wireshark抓包,揭示了问题根源在于网络架构中HTTPS请求被意外“降级”为HTTP传输,导致SSL握手失败。文章重点探讨了curl工具严格验证机制暴露的`Peer's Certificate issuer is not recognized`错误,并提供了网络配置修正方案与标准化测试流程。

u9v0w的博客 279

“傻瓜”stata入门——熟悉操作界面

小白开始学习stata和matlab,零基础上手

nnpersistent的博客 4457

tensorflow如何制作自己的数据集

用了这么久的tensorflow,例子跑了N多便,基本流程是清楚了。但是自己独立做一个小例子各种问题都来了。如自己图片数据集怎么做?说句老实话,tensorflow真是烦,管方文档教程上老拿MNIST和cifar_10这种做好的数据集说事,对于我们这些初学者,完全不知道图片该如何输入。今天给大家分享我的Tensorflow制作数据集的学习历程。  流程是:制作数据集—读取数据集—-加入队列 

余辉亮的学习笔记 2万+

【WRF-GHG 教程上】完整教程(2024年更新版)

完整教程(2024年更新版)

WW、forever的博客 1435

tensorflow分类任务——TFRecord读取自己制作的数据集

一、TensorFlow的数据读取机制 注意:这个地址是TensorFlow的数据读取机制,如果了解请跳过。 原博客地址:https://zhuanlan.zhihu.com/p/27238630 建议阅读博客:https://blog.youkuaiyun.com/pursuit_zhangyu/article/details/80607529 代码地址:https://github.com/hzy...

北国觅梦 2063

【教程4>第4章>第12节】通过FPGA实现基于FFT变换的频偏估计和补偿

基于FFT变换的频偏估计和补偿,其基本原理如下:而频偏补偿的目的是将频偏后的信号频谱移回原来的位置。

FPGA/MATLAB学习教程/源码/项目合作开发 882

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TensorFlow 读取自己的数据集

数据读取 TensorFlow程序读取数据一共有3种方法: 1. 供给数据(Feeding): 在TensorFlow程序运行的每一步, 让Python代码来供给数据。 2. 从文件读取数据: 在TensorFlow图的起始, 让一个输入管线从文件中读取数据。 2. 预加载数据: 在TensorFlow图中定义常量或变量来保存所有数据(仅适用于数据量比较小的情况)。 feed 参考资料 TF B...

fuyouzhiyi的博客 5808

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

TensorFlow 学习(二) 制作自己的TFRecord数据集,读取,显示及代码详解

前言在跑通了官网的mnist和cifar10数据之后,笔者尝试着制作自己的数据集,并保存,读入,显示。 TensorFlow可以支持cifar10的数据格式, 也提供了标准的TFRecord 格式,而关于 tensorflow 读取数据, 官网提供了3中方法 1 Feeding: 在tensorflow程序运行的每一步, 用python代码在线提供数据 2 Reader : 在一个计算图(tf.

miaomiaoyuan的博客 3万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

常用文件读取方法——tensorflow文件读取

tensorflow文件读取(多线程+队列) 重要的函数:数据切片 tf.slice() 数组装置 tf.transpose() 类型变换 tf.cast() 序列化 tostring() 1文件读取流程 1.1构造文件名队列...

清风拂面 2112

tensorflow制作数据集之TFRecord

自己制作二进制的数据集

xuan_zizizi的博客 3811

利用Tensorflow的队列多线程读取数据方式

今天小编就为大家分享一篇利用Tensorflow的队列多线程读取数据方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 在tensorflow中,有三种方式输入数据 利用feed_dict送入numpy数组 利用队列从文件中直接读取数据 预加载数据 其中第一种方式很常用,在tensorflow的MNIST训练源码中可以看到,通过feed_dict={},可以将任意...

python多线程基础教程进阶教程 921

TensorFlow读取二进制文件数据到队列

       TensorFlow是一种符号编程框架(与theano类似),先构建数据流图再输入数据进行模型训练。Tensorflow支持很多种样例输入的方式。最容易的是使用placeholder,但这需要手动传递numpy.array类型的数据。第二种方法就是使用二进制文件和输入队列的组合形式。这种方式不仅节省了代码量,避免了进行data augmentation和读文件操作,可以处理不同类型的...

为之则易,不为则难 7013
上一篇: ubuntu 下图标变问号问题
下一篇: C语言内存管理详解
continueOo
博客等级 码龄12年 90粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值