前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据管道Dataset

数据管道Dataset

作者头像
lyhue1991
发布2020-07-20 14:34:09
1.9K0
发布2020-07-20 14:34:09
举报

TensorFlow的中阶API主要包括:

  • 数据管道(tf.data)
  • 特征列(tf.feature_column)
  • 激活函数(tf.nn)
  • 模型层(tf.keras.layers)
  • 损失函数(tf.keras.losses)
  • 评估函数(tf.keras.metrics)
  • 优化器(tf.keras.optimizers)
  • 回调函数(tf.keras.callbacks)

如果把模型比作一个房子,那么中阶API就是【模型之墙】。

本篇我们介绍数据管道。

如果需要训练的数据大小不大,例如不到1G,那么可以直接全部读入内存中进行训练,这样一般效率最高。

但如果需要训练的数据很大,例如超过10G,无法一次载入内存,那么通常需要在训练的过程中分批逐渐读入。

使用 tf.data API 可以构建数据输入管道,轻松处理大量的数据,不同的数据格式,以及不同的数据转换。

一,构建数据管道

可以从 Numpy array, Pandas DataFrame, Python generator, csv文件, 文本文件, 文件路径, tfrecords文件等方式构建数据管道。

其中通过Numpy array, Pandas DataFrame, 文件路径构建数据管道是最常用的方法。

通过tfrecords文件方式构建数据管道较为复杂,需要对样本构建tf.Example后压缩成字符串写到tfrecoreds文件,读取后再解析成tf.Example。

但tfrecoreds文件的优点是压缩后文件较小,便于网络传播,加载速度较快。

1,从Numpy array构建数据管道

2,从 Pandas DataFrame构建数据管道

3,从Python generator构建数据管道

4,从csv文件构建数据管道

5, 从文本文件构建数据管道

6,从文件路径构建数据管道

7,从tfrecords文件构建数据管道

二,应用数据转换

Dataset数据结构应用非常灵活,因为它本质上是一个Sequece序列,其每个元素可以是各种类型,例如可以是张量,列表,字典,也可以是Dataset。

Dataset包含了非常丰富的数据转换功能。

  • map: 将转换函数映射到数据集每一个元素。
  • flat_map: 将转换函数映射到数据集的每一个元素,并将嵌套的Dataset压平。
  • interleave: 效果类似flat_map,但可以将不同来源的数据夹在一起。
  • filter: 过滤掉某些元素。
  • zip: 将两个长度相同的Dataset横向铰合。
  • concatenate: 将两个Dataset纵向连接。
  • reduce: 执行归并操作。
  • batch : 构建批次,每次放一个批次。比原始数据增加一个维度。其逆操作为unbatch。
  • padded_batch: 构建批次,类似batch, 但可以填充到相同的形状。
  • window :构建滑动窗口,返回Dataset of Dataset.
  • shuffle: 数据顺序洗牌。
  • repeat: 重复数据若干次,不带参数时,重复无数次。
  • shard: 采样,从某个位置开始隔固定距离采样一个元素。
  • take: 采样,从开始位置取前几个元素。

三,提升管道性能

训练深度学习模型常常会非常耗时。

模型训练的耗时主要来自于两个部分,一部分来自数据准备,另一部分来自参数迭代

参数迭代过程的耗时通常依赖于GPU来提升。

而数据准备过程的耗时则可以通过构建高效的数据管道进行提升。

以下是一些构建高效数据管道的建议。

  • 1,使用 prefetch 方法让数据准备和参数迭代两个过程相互并行。
  • 2,使用 interleave 方法可以让数据读取过程多进程执行,并将不同来源数据夹在一起。
  • 3,使用 map 时设置num_parallel_calls 让数据转换过程多进行执行。
  • 4,使用 cache 方法让数据在第一个epoch后缓存到内存中,仅限于数据集不大情形。
  • 5,使用 map转换时,先batch, 然后采用向量化的转换方法对每个batch进行转换。

1,使用 prefetch 方法让数据准备和参数迭代两个过程相互并行。

2,使用 interleave 方法可以让数据读取过程多进程执行,并将不同来源数据夹在一起。

3,使用 map 时设置num_parallel_calls 让数据转换过程多进行执行。

4,使用 cache 方法让数据在第一个epoch后缓存到内存中,仅限于数据集不大情形。

5,使用 map转换时,先batch, 然后采用向量化的转换方法对每个batch进行转换。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法美食屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一,构建数据管道
  • 二,应用数据转换
  • 三,提升管道性能
相关产品与服务
批量计算
批量计算(BatchCompute,Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算 Batch 可以根据用户提供的批处理规模,智能地管理作业和调动其所需的最佳资源。有了 Batch 的帮助,您可以将精力集中在如何分析和处理数据结果上。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档