TensorFlow入门(十五、数据读取机制(2))
使用Dataset创建和读取数据集,作为TensorFlow模型创建输入管道的新方式,使用性能比使用feed_dict或队列式管道的性能高很多,使用也更加简洁容易。也是google强烈推荐的数据读取方式,对于TensorFlow而言,十分重要。
Dataset是什么?
Dataset的定义 : 它是一个含有相同类型元素且有序的可迭代对象。为了方便理解,也可以看作是相同类型元素的有序列表。实际使用时,单个元素可以是向量,也可以是字符串、图片,甚至是数组或者字典。
Dataset的作用 : 为了更加高效便携的读取数据。读取数据的过程中,它可以从内存或者硬盘文件中读取加载数据组成数据集(Dataset),并同时对数据集进行一系列变换操作,最终将数据集提供给其他API使用。
Google官方给出的Dataset API是由以下图中所示的类组成:

Dataset有三个子类,分别是TextLineDataset、TFRecordDataset、FixedLengthRecordDataset,实例化类是迭代器Iterator。其中TextLineDataset用于读取文本数据,TFRecordDataset用于读取tfrecord数据,FixedLengthRecordDataset用于读取二进制文件数据。
使用方法如下:
tf.data.TFRecordDataset(filenames,compression_type = None,buffer_size = None,num_parallel_reads = None)
tf.data.TextLineDataset(filenames,compression_type = None,buffer_size = None,num_parallel_reads = None)
tf.data.FixedLengthRecordDataset(filenames,record_bytes,header_bytes = None,footer_bytes = None,buffer_size = None,compression_type = None,num_parallel_reads = None)
TextLineDataset和TFRecordDataset只需要输入文件名即可,FixedLengthRecordDataset需要输入文件名和每个样本的字节长度。
除此之外,还有一种加载数据生成Dataset的方式,即从内存中获取数据源构造dataset,常用的方法有:tf.data.Dataset.range()、tf.data.Dataset.from_tensors()或者tf.data.Dataset.from_tensor_slices()
Dataset数据的转换
在初步构建生成一个dataset后,可以根据需要,通过Transformation将其转换成一个新的Dataset。转换过程中,可以对原先的Dataset进行数据变换(map),打乱(shuffle),重复(repeat),组成一批数据(batch)等一系列操作。
数据变换(map)操作:
map操作接收的参数是一个函数,Dataset中的每个元素都会被当作该函数的输入,通过函数运行,最终将函数返回值作为新的Dataset。
示例代码如下:
import tensorflow as tfdef fun(x,arg):return x * argvar = tf.constant(3,dtype = tf.int64)
ds1 = tf.data.Dataset.range(8)
for line in ds1:print(line)ds2 = ds1.map(lambda x:fun(x,var))
for line in ds2:print(line)

打乱(shuffle)操作:
该操作可以打乱dataset中的元素。在机器学习中训练模型经常需要将数据打乱,这样可以保证每批次训练所用到的数据集是不一样的,从而提高模型训练的效果。
shuffle操作有一个参数buffersize,表示打乱时使用的buffer的大小,不设置会报错。当buffersize = 1时,表示不打乱顺序,既保持原序,当buffersize>1时,值越大,打乱程度越大。
示例代码如下:
import tensorflow as tfdef fun(x,arg):return x * argvar = tf.constant(3,dtype = tf.int64)
ds1 = tf.data.Dataset.range(8)
for line in ds1:print(line)ds2 = ds1.map(lambda x:fun(x,var))
for line in ds2:print(line)print("---------------")
ds3 = ds2.shuffle(3)
for line in ds3:print(line)

重复(repeat)操作:
该操作是将整个数据重复多次,主要用来处理机器学习中的每次训练(epoch)。比如,如果原先的数据是一次训练(epoch)数据,使用repeat(2)就可以将之变成2个训练数据。使用repeat操作时,可以设置重复次数,也可以不设置。不设置时,程序会一直进行重复操作,直到将其停止。
示例代码如下:
import tensorflow as tfdef fun(x,arg):return x * argvar = tf.constant(3,dtype = tf.int64)
ds1 = tf.data.Dataset.range(8)
for line in ds1:print(line)print("---------------")
ds2 = ds1.repeat(2)
for line in ds2:print(line)

分批(batch)操作:
该操作可以将数据集按照指定的元素个数分成多个批次。
示例代码如下:
import tensorflow as tfdef fun(x,arg):return x * argvar = tf.constant(3,dtype = tf.int64)
ds1 = tf.data.Dataset.range(8)
for line in ds1:print(line)print("---------------")
ds2 = ds1.batch(2)
for line in ds2:print(line)

Dataset的遍历
Dataset生成后,接下来需要构建迭代器Iterator获取数据。TensorFlow目前支持以下几种迭代器Iterator:one-shot iterator、initializable iterator、reinitializable iterator、feedable iterator。
one-shot iterator:该遍历器只支持遍历结构单一的数据集dataset,且不需要显式的初始化。应用的场景非常广。
示例代码如下:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()ds1 = tf.data.Dataset.range(8)
#实例化make_one_shot_iterator对象,该对象只能读取一次
iterator = tf.data.make_one_shot_iterator(ds1)
next_elem = iterator.get_next()
with tf.Session() as sess:for i in range(8):num = sess.run(next_elem)print(num)

相关文章:
TensorFlow入门(十五、数据读取机制(2))
使用Dataset创建和读取数据集,作为TensorFlow模型创建输入管道的新方式,使用性能比使用feed_dict或队列式管道的性能高很多,使用也更加简洁容易。也是google强烈推荐的数据读取方式,对于TensorFlow而言,十分重要。 Dataset是什么? Dataset的定义 : 它是一个含有相同类型元素且…...
Linux系统中实现便捷运维管理和远程访问的1Panel部署方法
文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、…...
Rancher清理节点
本节介绍如何从一个 Rancher 创建的 Kubernetes 集群中断开一个节点,并从该节点中删除所有 Kubernetes 组件。此过程允许您将释放节点资源,将节点用于其他用途。 当您使用 Rancher 创建集群节点 时,将创建资源(容器/虚拟网络接口)和配置项(证…...
C++-Mongoose(1)-http-server
Mongoose is a network library for C/C. It implements event-driven non-blocking APIs for TCP, UDP, HTTP, WebSocket, MQTT. mongoose很小巧,只有两个文件mongoose.h/cpp,拿来就可以用. 下载地址: https://github.com/cesanta/mongoo…...
Linux中openvswitch配置网桥详解
以下是对给出的命令进行逐行解释和注释: # 安装openvswitch软件包,并自动确认所有提示信息使用默认值(-y参数) dnf install openvswitch -y# 启动openvswitch服务 systemctl start openvswitch# 设置openvswitch服务开机启动 sys…...
Python自动化测试框架pytest的详解安装与运行
这篇文章主要为大家介绍了Python自动化测试框架pytest的简介以及安装与运行,有需要的朋友可以借鉴参考下希望能够有所帮助,祝大家多多进步 1. pytest的介绍 pytest是一个非常成熟的全功能的python测试工具,它主要有以下特征: 简…...
23种设计模式详解
设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模…...
微信小程序案例:2-2本地生活
文章目录 一、实现步骤(一)创建项目(二)创建页面(三)准备图片素材(四)编写页面结构1、编写轮播区域页面结构2、编写九宫格区域页面结构 (五)编写页面样式1、编…...
机器学习论文中常用的数学符号以及Latex
A数据集:通常用 D A \mathcal{D}_A DA表示。 B数据集:通常用 D B \mathcal{D}_B DB表示。 C数据集:通常用 D C \mathcal{D}_C DC表示。 在机器学习中,损失函数通常用 L L L表示,即: L ( θ , D ) …...
【iOS】Fastlane一键打包上传到TestFlight、蒲公英
Fastlane一键打包上传到TestFlight、蒲公英 前言一、准备二、探索一、Fastlane配置1、Fastlane安装2、Fastlane更新3、Fastlane卸载4、查看Fastlane版本5、查看Fastlane位置6、Fastlane初始化 二、Fastlane安装蒲公英插件三、Fastlane文件编辑1、Gemfile文件2、Appfile文件3、F…...
绝地求生大吃鸡攻略,让你成为顶级战士!
近年来,绝地求生越来越受到玩家们的喜爱,吃鸡成为了很多人的娱乐方式。作为一个资深吃鸡玩家,今天我要和大家分享一些提高战斗力的干货,以及一些方便吃鸡作图与查询的实用工具。 首先,提高战斗力是吃鸡游戏中最重要的一…...
[架构之路-235]:目标系统 - 纵向分层 - 数据库 - 数据库系统基础与概述(快速入门、了解核心概念):概念模型、逻辑模型、物理模型
目录 一、核心概念 1.1 什么是数据与信息 1.2 数据与数据库的关系 1.3 什么是数据库 1.4 数据库中的数据的特点 1.5 数据库与数据结构的关系 1.6 什么是数据库管理系统 1.7 什么是数据库系统 1.8 数据库的主要功能 1.9 Excel表格是数据库吗? 1.10 Excel表…...
小程序, 多选项
小程序, 多选项 <view class"my-filter-btnwrap"><block wx:for"{{archiveList}}" wx:key"index"><view class"my-filter-btnitem text-ellipsis {{item.checked ? active : }}" data-index"{{index}}" wx…...
华为云云耀云服务器L实例评测|使用redis事务和lua脚本
文章目录 云服务器的类型云服务优点redis一,关系型数据库(sqlserver,mysql,oracle)的事务隔离机制说明:redis事务机制 lualua脚本好处:一,怎么在redis中使用lua脚本二,脚…...
vue2项目中使用element ui组件库的table,制作表格,改表格的背景颜色为透明的
el-table背景颜色变成透明_el-table背景透明_讲礼貌的博客-CSDN博客 之前是白色的,现在变透明了,背景颜色是蓝色...
C#报错 功能“结构字段初始化表达式“在C#7.3中不可用。请使用10.0或更高的语言版本。
解决方式: 打开以下文件 增加 <LangVersion>10.0</LangVersion>...
servlet基础知识
目录 什么是servlet概念/定义作用 servlet容器概念/是什么作用如何配置和管理 servlet生命周期有哪些生命周期每个周期中可以执行哪些操作 创建和编写servlet如何创建一个简单的servletservlet类的结构是什么样的如何处理HTTP请求和响应 servlet映射和URL模式什么是servlet映射…...
使用poi-tl循环导出word报表
先看模板和导出的效果 模板 效果 根据模板循环生成表格,每个表格再循环填充数据,也就是两层循环,第一层循环是学生学期信息,第二层循环是学生的成绩数据。 第一个循环 {{?listTable}} {{/}}第二个循环 {{reportList}} 表格…...
PyCharm搭建Scrapy环境
Scrapy入门 1、Scrapy概述2、PyCharm搭建Scrapy环境3、Scrapy使用四部曲4、Scrapy入门案例4.1、明确目标4.2、制作爬虫4.3、存储数据4.4、运行爬虫 1、Scrapy概述 Scrapy是一个由Python语言开发的适用爬取网站数据、提取结构性数据的Web应用程序框架。主要用于数据挖掘、信息处…...
TensorFlow的transformer类模型文件转换为pytorch
在进行transformer类模型的训练或开发时,我们会在GitHub、huggingface等平台上下载已有的模型文件。个人习惯用pytorch框架进行代码编写,然而很多时候在下载模型文件时,会遇到TensorFlow的模型,这是就涉及到转换的问题。 首先说一…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
