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

Tensorflow2.0加载图片数据集的两种方式

在tensorflow2.0中加载图片数据集一般有两种方式,第一种是使用tf.keras中的ImageDataGenerator生成器,适合图片分类问题,简单但不灵活;第二种是使用tf.data.Dataset搭配tf.image中的一些图片处理方法,较为灵活。下面分别介绍一下。

weixin_43917574的博客 7809

使用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中读取图像数据的三种方式

Update on 2019.06.18 从tesorflow1.11之后,(大概是这个版本号),谷歌推出了tf.data模块来读取数据,甚至在tensorflow2.0中,取消了数据队列管道,所以我建议大家学习tf.data模块。未来我也会做详细的tf.data模块使用说明。 Upata on 2019.7.22 我已经更新了tf.data的使用方法。建议精读,一定能掌握tf.da...

我的博客有点东西 1万+

Tensorflow中CSV文件读取

Tensorflow中CSV文件读取前言创建CSV文件名队列读取文本解析内容,将每一列转换为张量数据训练 前言 大家好!第一次写博客,经验不足,希望对大家有帮助。 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本) ,下面讲解一下CSV文件读取。 创建CSV文件名队列 应用Tensorf...

hmmhxh的博客 994

Tensorflow训练的花的数据集

tensorflow珣丽娜数据集 。

Tensorflow图片数据读取

关于Tensorflow读取数据,有三种方法: 供给数据(feeding):在Tensorflow程序运行的每一步,让Python代码来供给数据。 从文件中读取数据:在Tensorflow图的开始,让一个输入管线从文件中读取数据。 预加载数据:在Tensorflow图中定义常量或者变量来保存所有的数据(仅适用于数据量比较小的情况) 对于数据量较小而言,一般选择直接将数据加载进内存,然后再分batc

林林同學的博客 1967

tiktok算法协议研究

经过上述分析,可以确定目标字符串来源于一段 JSON 数据,而这段 JSON 数据来自于一个经过加密的本地文件。对字符串 "sdi_v2" 进行 SHA-1 计算,得到 20 字节的结果;将第一步得到的数据进行MD5计算,生成16字节的结果;将第二步的结果转换为十六进制字符串,从而得到 32 字节的密钥。写这种算法分析的帖子真的是太无聊了,就先分析到这里吧,后续有机会再来谈下被加密的本地文件是怎么来的!!自我感觉TT的算法并不难,就是量太大了,所以我想问问有没有感兴趣的朋友来一起分析,欢迎联系。

2503_90751938的博客 2577

tensorflow2.0 读取图片数据总结

大部分的教程讲解的都是MNIST等已经为用户打包封装好的数据集,用户只需要load_data即可实现数据导入。但是在我们平时使用时,无论您是做分类还是检测或者分割任务,我们不可能每次都能找到打包好的数据集使用,大多数时候我们使用的都是自己的数据集,也就是我们需要从本地读取文件。因此我们是很有必要学会数据预处理这个本领的。本篇文章,我们就聊聊如何使用TensorFlow2.0对自己的数据集进行处理。...

qq_35306993的博客 5683

四旋翼滑模控制:从理论到Simulink实现

本文深入探讨了四旋翼滑模控制的理论与Simulink实现,对比了其相较于PID控制在抗干扰和鲁棒性方面的显著优势。文章详细介绍了从精确动力学建模、内外环滑模控制器设计到指令解算的完整流程,并分享了Simulink仿真搭建、参数调试及抗扰性能验证的实战经验,帮助工程师掌握在复杂环境下提升四旋翼稳定性的进阶技能。

weixin_29163581的博客 375

Zotero PDF Translate插件实战:DeepL API免费申请与高效翻译配置指南

本文提供Zotero PDF Translate插件配置DeepL API的完整实战指南。详细介绍了如何免费申请DeepL API密钥,解决国内访问问题,并在插件中完成精细配置,实现文献阅读时的无缝划词翻译,大幅提升科研人员和学生的英文文献阅读效率。

rum55的博客 458

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

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

qq_43723025的博客 6216

手把手教你学Simulink--基于飞行控制与稳定性的场景实例:多旋翼无人机在风扰动下的稳定性分析

本文介绍了使用Simulink仿真多旋翼无人机在风扰动下稳定性的方法。通过构建包含飞行器动力学模型、PID控制系统和环境模拟模块的仿真系统,分析了无人机在不同风速条件下的飞行性能。详细说明了从创建模型、设置动力学方程、设计PID控制器到添加风扰动模型的完整流程,并提供了性能评估指标。该方法可用于验证控制系统有效性,优化飞行稳定性参数,为无人机控制系统的设计和调试提供参考。

MHD0815的博客 328

tensorflow如何制作自己的数据集

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

余辉亮的学习笔记 2万+

PINN疲劳寿命预测优化

本项目基于物理信息神经网络(PINN)构建材料疲劳寿命预测模型,通过融合Paris裂纹扩展方程与实验数据,实现裂纹扩展行为的精准预测。核心方法包括:1)将Paris方程作为物理约束嵌入神经网络训练;2)生成含噪声的模拟数据并进行归一化处理;3)采用PINN-GA联合优化框架,以裂纹扩展速率最小化为目标优化材料参数。该方案通过物理规律与数据驱动的结合,显著提升预测模型的泛化能力,为工程材料寿命评估提供新思路。

huanghm88的专栏 146

5、AIX系统硬件管理与故障诊断全解析

本文全面解析了AIX系统的硬件管理与故障诊断方法,涵盖系统管理服务(SMS)的使用、设备兼容性配置、设备配置数据库结构、常用命令如cfgmgr、lsattr、smitty devices的操作详解,并深入介绍了错误日志管理机制,包括errdemon、errpt、errlogger等命令的应用。通过实际案例分析和流程图展示,帮助系统管理员掌握从问题怀疑到诊断执行再到日志清理的完整流程,同时提供注意事项与最佳实践,助力AIX系统的稳定运行与高效维护。

y2z3a4b5c的博客 62

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

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

北国觅梦 2063

FPGA实现PID算法

PID 控制器表达式如下(引用某硕士论文 《基于FPGA的PID控制器研究与实现》): 其中,Kp为比例增益,Ti为积分时间常数,Td为微分时间常数,u(t)为控制量,e(t)为偏差。 在数字控制系统中,PID控制规律的实现必须用数值逼近的方法。当采样周期相当短时,用求和代替积分、用后向差分代替微分,使模拟PID离散化变为差分方程。 本文使用并行结构来实现。具有延时小,计算速度快的特点,但需要资源比较多。 利用图3.2所示并行结构实现方法 ,进一步将3.8式分解: ...

nxin168的博客 1万+

TensorFlow 读取自己的数据集

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

fuyouzhiyi的博客 5808

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

miaomiaoyuan的博客 3万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

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

清风拂面 2112

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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、付费专栏及课程。

余额充值