深度学习基础之《TensorFlow框架(11)—数据读取》

一、TenorFlow读取文件方法

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

2、QueueRunner
基于队列的输入管道,从TensorFlow图形开头的文件中读取数据
注:TensorFlow2.0版本用tf.data模块代替了QueueRunner

3、Feeding
占位符 搭配 feed_dict使用
运行每一秒时,python代码提供数据

4、预加载数据
TensorFlow图中的张量包含所有数据(对于小数据集)

二、QueueRunner文件读取流程

1、第一阶段
构造文件名队列

2、第二阶段
读取与解码

3、第三阶段
批处理

4、手动开启线程

三、tf.data读取文件

1、tf.data的核心是tf.data.Dataset类

2、使用内存中的对象和张量创建数据集
(1)tf.data.Dataset.from_tensors()
读取单个元素数据集

(2)tf.data.Dataset.from_tensor_slices()
from_sensors生成一个仅包含单个元素的数据集。要将输入张量切片为多个元素,请使用from_sensor_slices

(3)例子
dataset = tf.data.Dataset.from_tensors([1, 2, 3])
dataset读取的是[array([1, 2, 3], dtype=int32)]

dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3])
dataset读取的是[1, 2, 3]三个元素

3、使用TFRecord格式创建数据集
tf.data.TFRocrdDataset()

4、使用文本文件创建数据集
tf.data.TextLineDataset()
其中每一行包含一个数据样本。一些示例包括日志消息,问题答案等

5、使用csv文件创建数据集
tf.data.experimental.CsvDataset()
tf.data.experimental.make_csv_dataset()提供更高级功能

6、数据集对象的预处理
tf.data.Dataset类为我们提供了多种数据集预处理方法

(1)Dataset.map(f)
对数据集中的每个元素应用函数f,得到一个新的数据集(这部分往往结合tf.io进行读写和解码文件,tf.image进行图像处理)

(2)Dataset.shuffle(buffer_size)
将数据集打乱(设定一个固定大小的缓冲区(Buffer),取出前buffer_size个元素放入,并从缓冲区中随机采样,采样后的数据用后续数据替换)

(3)Dataset.batch(batch_size)
将数据集分成批次,即对每batch_size个元素,使用tf.stack()在第0维合并,成为一个元素

(4)Dataset.prefetch()
预取出数据集中的若干个元素(可提升训练流程并行效率)

除此以外,还有Dataset.repeat()(重复数据集的元素)、Dataset.reduce()(与Map相对的聚合操作)、Dataset.take()(截取数据集中的前若干个元素)等,可参考API文档进一步了解

四、读取与解码

1、读取文件内容(以csv为例)
(1)读取csv存储位置形成一个文件名的dataset
(2)从这个dataset中读取csv文件并解析
(3)将读取的数据合并形成一个整个的dataset

五、内容解码

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

2、tf.io.decode_csv()
解码文本文件的内容

3、tf.io.decode_jpeg(contents)
将JPEG编码的图像解码为uint8张量
return:uint8张量,3-D形状[height, width, channels]

4、tf.io.decode_png(contents)
将PNG编码的图像解码为uint8张量或uint16张量
return:张量类型,3-D形状[height, width, channels]

5、tf.io.decode_raw(input_bytes, out_type)
解码二进制文件内容

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

六、批处理

1、解码之后,可以直接获取默认的一个样本内容了,但如果想要获取多个样本,需要用批处理

2、tf.data.Dataset.batch(batch_size, drop_remainder=False, num_parallel_calls=None, deterministic=None)
将此数据集的batch_size个元素组合成一个元素
说明:
batch_size:从队列中读取的批处理大小

参考资料:
https://blog.csdn.net/u013421629/article/details/103556599
https://blog.csdn.net/wizardforcel/article/details/130197088
https://blog.csdn.net/qq_40913465/article/details/104790258
 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值