Dataset封装了很好的关于数据集的一些基本操作,在这里做一下总结。该对象的路径是:tensorflow.data.Dataset(这是1.4版本之后的)很大程度上参考了这篇博客

同时再推荐一个特别好的博客:https://towardsdatascience.com/how-to-use-dataset-in-tensorflow-c758ef9e4428

Tensoflow的核心数据就是tensor。可以这么理解,想要让tensoflow的数据正确的“流动”起来,那么就需要正确的匹配张量的维数。再给计算图模型填充数据的时候,使用字典的方式是最慢的,应该避免这种操作;正确的做法是把数据组合成张量,进行操作,这也是tf.data.Dataset的核心功能之一。

tf.data.Dataset.from_tensor_slices

该函数是核心函数之一,它的作用是把给定的元组、列表和张量等数据进行特征切片。切片的范围是从最外层维度开始的。如果有多个特征进行组合,那么一次切片是把每个组合的最外层的数据切出。。直接看代码理解。

假设我们现在有两组数据,分别是特征和标签,为了简化说明问题,我们假设每两个特征对应一个标签。之后把特征和标签组合成一个tuple,那么我们的想法是让每个标签都恰好对应2个特征,而且像直接切片,比如:[f11, f12] [t1]f11表示第一个数据的第一个特征,f12表示第1个数据的第二个特征,t1表示第一个数据标签。那么tf.data.Dataset.from_tensor_slices就是做了这件事情:

import tensorflow as tf
import numpy as npfeatures, labels = (np.random.sample((5, 2)),  # 模拟5组数据,每组数据2个标签np.random.sample((5, 1)))  # 模拟5组特征,注意两者的维数必须匹配print((features, labels))  #  输出下组合的数据
data = tf.data.Dataset.from_tensor_slices((features, labels))
print(data)  # 输出张量的信息

结果输出:

(array([[0.94509483, 0.19160528],[0.49125608, 0.93146317],[0.19331899, 0.59950161],[0.8338232 , 0.71606446],[0.23264883, 0.71179252]]), array([[0.48340206],[0.55842171],[0.30450086],[0.45078316],[0.40497981]]))
<DatasetV1Adapter shapes: ((2,), (1,)), types: (tf.float64, tf.float64)>

tf.data.Dataset.make_one_shot_iterator

生成一个迭代器,用于便利所有的数据。一般用法如下:

tf.data.Dataset.make_one_shot_iterator.get_next()

每次列举出下一个数据集。
实例:

import tensorflow as tf
import numpy as npdata = tf.data.Dataset.from_tensor_slices(np.array([1, 2, 3, 4, 5]))element = data.make_one_shot_iterator().get_next()  # 建立迭代器,并进行迭代操作with tf.Session() as sess:try:while True:print(sess.run(element))except tf.errors.OutOfRangeError:print("Out range !")

以字典的方式处理数据

import tensorflow as tf
import numpy as npa = np.array(['a', 'b', 'c', 'd', 'e'])
b = np.array([1, 2, 3, 4, 5])# 分别切分数据,以字典的形式存储
data = tf.data.Dataset.from_tensor_slices({"label1": a,"label2": b}
)it=data.make_one_shot_iterator().get_next()with tf.Session() as sess:try:while True:print(sess.run(it))except tf.errors.OutOfRangeError:print("out of range")

输出结果

{'label2': 1, 'label1': b'a'}
{'label2': 2, 'label1': b'b'}
{'label2': 3, 'label1': b'c'}
{'label2': 4, 'label1': b'd'}
{'label2': 5, 'label1': b'e'}

常用的数据集操作

map函数

与python中的map作用类似,对输入的数据进行预处理操作。

import tensorflow as tf
import numpy as npa = np.array([1, 2, 3, 4, 5])data = tf.data.Dataset.from_tensor_slices(a)
# 注意在这里是返回的集合,原来的集合不变
data = data.map(lambda x: x ** 2)it = data.make_one_shot_iterator().get_next()with tf.Session() as sess:try:while True:print(sess.run(it))except tf.errors.OutOfRangeError:print("out of range")
batch函数

batch就是将多个元素组合成batch,如下面的程序将dataset中的每个元素组成了大小为32的batch:

dataset = dataset.batch(32)
shuffle函数

shuffle的功能为打乱dataset中的元素,它有一个参数buffersize,表示打乱时使用的buffer的大小:

dataset = dataset.shuffle(buffer_size=10000)
repeat函数

repeat的功能就是将整个序列重复多次,主要用来处理机器学习中的epoch,假设原先的数据是一个epoch,使用repeat(5)就可以将之变成5个epoch:

dataset = dataset.repeat(5)  # 重复5次数据

注意,必须指明重复的次数,否则会无限期的重复下去。

一种常规的用法:
dataset.shuffle(1000).repeat(10).batch(32)

把数据进行1000个为单位的乱序,重复10次,生成批次为32的batch

tf.data.TextLineDataset

这个函数的输入是一个文件的列表,输出是一个dataset。dataset中的每一个元素就对应了文件中的一行。可以使用这个函数来读入CSV文件。一般操作方式:

tf.data.TextLineDataset(file_path).skip(n)

读取文件,同时跳过前n行。

Tensorflow关于Dataset的一般操作相关推荐

  1. Tensorflow基础入门十大操作总结

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:李祖贤,Datawhale高校群成员,深圳大学 TensorFlo ...

  2. C# LINQ系列:LINQ to DataSet的DataTable操作 及 DataTable与Linq相互转换

    LINQ to DataSet需要使用System.Core.dll.System.Data.dll和System.Data.DataSetExtensions.dll,在项目中添加引用System. ...

  3. Tensorflow线程队列与IO操作

    目录 Tensorflow线程队列与IO操作 1 线程和队列 1.1 前言 1.2 队列 1.3 队列管理器 1.4 线程协调器 2 文件读取 2.1 流程 2.2 文件读取API: 3 图像读取 3 ...

  4. Tensorflow学习四---高阶操作

    Tensorflow学习四-高阶操作 Merge and split 1.tf.concat 拼接 a = tf.ones([4,32,8]) b = tf.ones([2,32,8]) print( ...

  5. Tensorflow(02)——dataset与sequential

    目录 0.学习地址推荐 1. tensorflow.dataset数据集操作 1.1 自定义生成数据集 1.2 从CSV文件生成数据集 2. keras中的sequential模型 2.1 Seque ...

  6. TensorFlow入门--队列与TensorBoard操作

    目录 第1关:出队操作 - dequeue 方法 第2关:入队 - enqueue方法 第3关:TensorBoard的使用 第1关:出队操作 - dequeue 方法 本关任务:编写一个能计算队列中 ...

  7. Tensorflow中卷积的padding操作

    上海站 | 高性能计算之GPU CUDA培训 4月13-15日 三天密集式学习  快速带你晋级 阅读全文 > 正文共975字,2张图,预计阅读时间3分钟. 之前一直对tensorflow的pad ...

  8. c# mysql 1062_C#中MySQL函数用DATASET 和 MySqlDataAdapter 操作数据库

    [如果一门程序设计语言不支持数据库操作的话,其很难在现在的世界中存活下来.C#语言提供了丰富的数据库操作类库,极大地方便了对数据库的操作.在C#中,常用的有三种 访问 1.C#中调用MYSQL数据库时 ...

  9. tensorflow中Dataset.shuffle函数的buffer size的含义解读

    Reference tensorflow - Meaning of buffer_size in Dataset.map , Dataset.prefetch and Dataset.shuffle ...

最新文章

  1. SpringBoot跨域
  2. easyui toolbar分隔线
  3. 串口调试助手-打开报错
  4. vs2010 插件不显示的问题处理。
  5. Linux CentOS 修改服务器主机名hostname
  6. POJ 2584 T-Shirt Gumbo (二分图多重最大匹配)
  7. Spring Security HttpSecurity.formLogin
  8. 动态规划:最长上升子序列(二分算法 nlogn)
  9. php通过mysqldump数据库备份,mysql使用mysqldump进行数据库备份_MySQL
  10. Tracepro中up vector和normal vector的定义1
  11. [渝粤教育] 中山大学 健康评估 参考 资料
  12. HDU 6599 Palindromic_Automaton
  13. 大数据(3i)Sqoop安装和操作
  14. Linux系统的madplay、mplayer音视频播放器的制作
  15. 原生js实现贪食蛇小游戏
  16. 首次!TinyML低功耗边缘侧机器学习技术论坛-亚洲分会来到中国!
  17. 微信小程序跳过第三方的_微信小程序可以跳转第三方页面吗
  18. sql 修改表的字段属性
  19. 杭电ACM(HDUOJ)试题分类
  20. Linux上基于 Golang 实现 KeyLogger 按键记录

热门文章

  1. 将CSV文件写入到MySQL中(用Pandas库实现MySQL数据库的读写)
  2. 记一次微信数据库解密过程
  3. 【五级流水线CPU】—— 6. 加载存储指令(14)
  4. 自动驾驶—— Image Caption的学习笔记
  5. 【最详细】Tcpdump使用实验
  6. 理解metrics.classification_report
  7. TLE5012B ESP32驱动程序、硬件电路设计、4线SPI通信,驱动完美兼容4线SPI不用改MOSI开漏推挽输出
  8. linux命令:软件更新 sudo apt-get update 和 sudo apt-get upgrade
  9. Activity之间的数据传递—实现Parcelable接口
  10. 敏捷开发般若敏捷系列之七:重新认识敏捷与CMMI