文件读取通用流程|学习笔记

简介: 快速学习文件读取通用流程

开发者学堂课程【深度学习框架 TensorFlow 入门文件读取通用流程学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/773/detail/13552


文件读取通用流程


内容介绍:

一、读取数据的方式

二、文件读取流程

三、线程操作


一、读取数据的方式

有三种获取数据到 TensorFlow 程序的方法:

1. QueueRunner :基于队列的输入管道从 TensorFlow 图形开头的文件中读取数据。

2. Feeding :运行每一秒时, Python 代码提供数据。

3.预加载数据: TensorFlow 图中的张量包含所有数据(对于小数据集)。


二、文件读取流程

多线程 + 队列

第一阶段 构造文件名队列

方便我们快速高效地读取这组文件,先把文件名读取进来,在这过程中做了一个 Randim Shuffle (随机打乱)工作。

第二阶段 读取与解码

读取器 Reader 可以从上一步拿到的文件名队列的文件中读取数据,按照一个样本为一个单位读取。

不同数据类型的样本不一样,例如读取图片样本就是一张图片,读取二进制文件样本就是某一个固定字节长度的二进制。

根据文件类型的不同进行相应的解码,在读取不同文件的时候有细微的不同,最关键的不同在于读取与解码。

第三阶段 批处理

将解码的样本放入批处理队列中,处理后传给训练模型。

手动开启线程

注:这些操作需要启动运行这些队列操作的线程,以使我们在进行文件读取的工程中能够顺利进行入队出队操作。

(1)构造文件名队列

将需要读取的文件的文件名放入文件名队列。

tf.train.string_input_producer(string_tensor,shuffle=True)

 string_tensor :含有文件名+路径的1阶张量,传进来的列表会转换为1阶张量

 shuffle 默认打乱文件名顺序

 num_epochs :可以设置过几遍数据,默认无限过数据,直到满足设定的批处理大小为止

 return 文件队列

(2)读取与解码

1)读取文件内容

阅读器默认每次只读一个样本。

具体来说:文本文件默认一次读取一行 图片文件默认一次读取一张图片 二进制文件一次读取指定字节数(最好是一个样本的字节数) TFRecords 默认一次读取一个 example

tf.TextLineReader :

阅读文本文件逗号分隔值( CSV )格式,默认桉行读取

 return :读取器实例

tf.WholeFileReader :用于读取图片文件

 return :读取器实例

tf.FixedLengthRecordReader(record_bytes) :二进制文件

要读取每个记录是固定数量字节的二进制文件

 record_bytes :整型,指定每次读取(一个样本)的字节数

 return :读取器实例

tf.TFRecordReader :读取 TFRecords 文件

 return :读取器实例

1.它们有共同的读取方法: read(file_queue) ,并且都会返回一个Tensors元组( key 文件名字, value 默认的内容(一个样本))

2.由于默认只会读取一个样本,所以如果想要进行批处理,需要使用 tf.train.batch 或 tf.train.shuffle_batch 进行批处理操作,便于之后指定每批次多个样本的训练。

2)内容解码

读取不同类型的文件,也应该对读取到的不同类型的内容进行相对应的解码操作,解码成统一的 Tensor 格式

tf.decode_csv :解码文本文件内容

tf.image.decode_jpeg(contents)

将 JPEG 编码的图像解码为 uint8张量

 return : uint8张量,3-D形状[height,width,hannels]

tf.image.decode_png(contents)

将 PNG 编码的图像解码为 uint8张量

return :张量类型,3-D形状[height,width,hannels]

tf.decode_raw :解码二进制文件内容

与 tf.FixedLengthRecordReader 搭配使用,二进制读取为 uint8类型

解码阶段,默认所有的内容都解码成 tf.uint8类型,如果之后需要转成指定类型则可使用 tf.cast() 进行相应转换。

(3)批处理

解码之后,可以直接获取默认的一个样本内容了,但如果想要获取多个样本,需要加入到新的队列进行批处理。

tf.train.batch(tensors,batch_size,num_threads = 1,capacity = 32,name=None)

读取指定大小(个数)的张量

 tensors :可以是包含张量的列表,批处理的内容放到列表当中

 batch_size :从队列中读取的批处理大小

 num_threads :进入队列的线程数

 capacity :整数,队列中元素的最大数量

 return : tensors

tf.train.shuffle_batch


三、线程操作

以上用到的队列都是 tf.train.QueueRunner 对象。

每个 QueueRunner 都负责一个阶段, tf.train.start_queue_runners 函数会要求图中的每个 QueueRunner 启动它的运行队列操作的线程。(这些操作需要在会话中开启)

tf.train.start_queue_runners(sess=None,coord=None)

收集图中所有的队列线程,默认同事启动线程

 sess :所在的会话

 coord :线程协调器

 return :返回所有线程

tf.train.Coordinator()

线程协调员,对线程进行管理和协调

 request_stop():请求停止

 should_stop():询问是否结束

 join(threads=None,stop_grace_period_secs=120):回收线程

 return :线程协调员实例

相关文章
|
机器学习/深度学习 计算机视觉
YOLOv5改进 | Conv篇 | 在线重参数化卷积OREPA助力二次创新(提高推理速度 + FPS)
YOLOv5改进 | Conv篇 | 在线重参数化卷积OREPA助力二次创新(提高推理速度 + FPS)
404 2
|
网络架构 CDN
|
监控 算法 数据可视化
ERP系统中的生产调度与计划排程解析
【7月更文挑战第25天】 ERP系统中的生产调度与计划排程解析
768 1
|
运维 监控 负载均衡
使用Java构建高可用系统的最佳实践
使用Java构建高可用系统的最佳实践
|
存储 人工智能 安全
OSS 深度解析:Data + AI 时代的对象存储
在 Data + AI 时代,随着大数据分析和 AI/ML 工作负载的进一步融合,对象存储 OSS 作为面向 AI 时代的数据基础设施,迎来了新的挑战与创新机遇。本话题我们将会介绍对象存储的能力创新,深度解读对象存储在实现稳定、安全、高性能和低成本背后的技术进展,并展望未来 AI 驱动趋势下的技术发展方向。
1773 2
|
SQL 存储 关系型数据库
MySQL能否查询某张表的操作记录
MySQL能否查询某张表的操作记录
2252 1
|
弹性计算 负载均衡 网络协议
slb关联监听规则
SLB的监听规则配置涉及监听协议与端口选择,如HTTP/HTTPS的80/443端口;绑定后端服务器组,按轮询、最少连接数等策略分发请求;设定健康检查以确保仅转发给健康实例;设置转发策略,如URL路径、域名路由或重定向;HTTPS监听需配置SSL证书。通过这些规则,SLB能高效均衡流量,提升服务的高可用性和可扩展性。在华为云或阿里云等平台,用户需完成这些步骤来配置SLB。
289 1
|
API
若依框架 -------- vue3+element-plus(四)
若依框架 -------- vue3+element-plus(四)
687 1
|
消息中间件 小程序 Java
暹罗点餐开源啦,一款java多门店点餐系统-连锁门店如蜜雪冰城瑞幸咖啡
暹罗点餐是一款Java餐饮点餐系统,适用于多门店的连锁品牌,对标蜜雪冰城、瑞幸咖啡。系统包含用户端、商家端、配送端以及总管理后台; * 前端使用uni-app开发,可打包部署到微信小程序、APP、H5 * Web端使用vue + Element开发 * 服务端使用java语言开发,技术栈:Spring Boot + Redis + RocketMQ + WebSocket + ElasticSearch + ELK + SpringBoot Admin
1094 1
暹罗点餐开源啦,一款java多门店点餐系统-连锁门店如蜜雪冰城瑞幸咖啡

热门文章

最新文章