TensorFlow入门(十五、数据读取机制(2))

news2024/9/23 9:36:24

使用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 tf

def fun(x,arg):
    return x * arg

var = 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 tf

def fun(x,arg):
    return x * arg

var = 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 tf

def fun(x,arg):
    return x * arg

var = 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 tf

def fun(x,arg):
    return x * arg

var = 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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1075356.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++局部变量 成员变量 全局变量(及文件内外全局变量)

在C中,类的局部变量、成员变量、全局变量、静态全局变量: 局部变量:局部变量是在函数内部定义的变量,它只能在该函数的范围内被访问和修改。当函数执行结束后,局部变量的内存空间会被释放。局部变量主体是函数。局部变…

如何成为一名云计算构架师,看这里!

都说,每个程序员心中都有一个成为架构师的梦想! 因为不管是对于自身专业技能的认可,还是立足于现实的薪资,都是令人向往的! 1.云计算架构师介绍 云计算架构师负责管理企业中的云计算架构,尤其是在云技术…

P1867 【Mc生存】经验值

#include <stdio.h>int main(void) {int n; //n项操作double HP 10; //总生命值&#xff0c;初始化为10&#xff0c;上限是10int LV 0; //等级&#xff0c;初始化为1int EXP 0; //总经验值&#xff0c;初始化为0double de_HP; //减少的生命值int in_EXP; //增加…

react学习(三——实战项目)

创建 npm init vite小知识 "scripts": {"dev": "vite --host --port 3002 --open", //--host会在终端显示IP&#xff0c;--port 3002把显示端口改为3002&#xff0c;--open会在启动后打开链接"build": "tsc && vite bui…

如何自学(黑客)网络安全技术————(详细分析学习思路)

前言 前几天发布了一篇 网络安全&#xff08;黑客&#xff09;自学 没想到收到了许多人的私信想要学习网安黑客技术&#xff01;却不知道从哪里开始学起&#xff01;怎么学&#xff1f;如何学&#xff1f; 今天给大家分享一下&#xff0c;很多人上来就说想学习黑客&#xff0…

IIC总线

IIC总线原理 时序图作业 MPU6050 MPU6050是一个运动处理传感器&#xff0c;其内部集成了3轴加速度传感器 和3轴陀螺仪&#xff08;角速度传感器&#xff09;,以及一个可扩展数字运动处理器

php伪协议 [ACTF2020 新生赛]Include1

打开题目 点击后 期间bp抓包也一无所获 那我们回到题目上来 我们可知这是文件包含漏洞&#xff0c;但是我们直接读取的是flag.php文件&#xff0c;而非flag.php文件源码&#xff0c;那我们想要获取文件源码&#xff0c;这里就涉及到php伪协议 php://filter可以获取指定文件源码…

typename、typedef、using对比

在c的标准库中&#xff0c;因为类继承关系比较复杂和模板使用比较多的原因&#xff0c;源代码中充斥着typename、typedef和using这三个关键字 一、typename关键字 1.1、typename的第一个作用是用作模板里面&#xff0c;来声明某种类型 template<typename _Tp, typename _…

根据二叉树创建字符串--力扣

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…

stm32 hal库 st7789 1.54寸lcd

文章目录 前言一、软件spi1.cubemx配置2.源码文件 二、硬件spi1.cubemx配置2.源码文件3.小小修改 总结 前言 1.54寸lcd 240*240 一、软件spi 1.cubemx配置 一定要注意把这几个东西上拉。 使用c8 2.源码文件 我使用的是中景园的源码&#xff0c;他本来是是标准库的稍微修改…

死灰复燃!QakBot 恶意软件仍在运行中

2023 年 8 月&#xff0c;美国联邦调查局宣布&#xff0c;在名为“猎鸭行动”的国际执法活动中&#xff0c;成功拆除 Qakbot 僵尸网络&#xff08;Qakbot 也称 QBot、QuackBot 和 Pinkslipbot&#xff0c;自 2008 年以来一直非常活跃&#xff09;。然而 Security A ffairs 网站…

好用的便签软件如何实现定时提醒?支持设定定时提醒的便签

不论你是职场白领&#xff1f;还是销售精英&#xff1f;亦或者是家庭主妇&#xff0c;每天都会面临着大量的事务需要处理&#xff0c;怎么才能高效规划管理自己每日事务&#xff0c;以及进行时间管理成为一项比较重大的挑战&#xff0c;便签类软件可以辅助大家按时完成各项任务…

Django REST framework API版本管理【通过GET参数传递】

API版本 在开发过程中可能会有多版本的API&#xff0c;因此需要对API进行管理。django drf中对于版本的管理也很方便。 http://www.example.com/api/v1/info http://www.example.com/api/v2/info 上面这种形式就是很常见的版本管理 在restful规范中&#xff0c;后端的API需…

基于安卓android微信小程序宠物交易小程序

运行环境 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 小程序框架&…

七、全屏粒子特效

简介 给页面添加粒子光影特效。欢迎访问个人的简历网站预览效果 本章涉及修改与新增的文件&#xff1a;main.ts、App.vue、utils 一、安装插件 安装 vue3-particles tsparticles插件 详细文档查看 tsParticles 官网 npm i vue3-particlesnpm i tsparticles创建配置文件 o…

封装axios的post请求踩坑记录

今天自己封装axios请求时遇到了两个坑&#xff0c;所以记录一下。 第一个坑是我在代码的逻辑是只会发一次请求&#xff0c;但是在控制台却发现发了两次&#xff0c;第一次为不带参数的请求方式为options的预检请求&#xff0c;第二次的请求才是我真正需要发的post请求。在经过上…

基于Java+SpringBoot+Vue企业OA管理系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

软件测试/测试开发丨利用ChatGPT 生成自动化测试脚本

点此获取更多相关资料 简介 自动化测试脚本可以模拟用户与应用程序的交互&#xff0c;例如点击按钮、输入数据、导航到不同的页面等等&#xff0c;以验证应用程序的正确性、性能和稳定性。 自动化测试在回归测试、冒烟测试等测试流程中都可以极大地起到节省时间、节省人力的作…

程序设计竞赛如何入门?

程序设计如何入门? 一、前言 对于刚接触竞赛的小白来说&#xff0c;了解以下几个问题至关重要。 程序设计竞赛难度如何&#xff1f;真小白怎么办&#xff1f;而且我数据结构什么的没上过或者学的很差怎么办&#xff1f;都说要刷题&#xff0c;但是怎么刷&#xff1f;刷多少…

QEMU背景知识

QEMU的两种模拟方案&#xff1a; 系统模拟 System Simulation&#xff1a;可以简单的理解为对整个计算机系统进行模拟&#xff08;CPU、Memory等&#xff09; 用户模式模拟 User Mode Simulation&#xff1a;基于模拟方案执行特定应用程序 除了模拟功能外&#xff0c;QUME工具…