【tensorflow】制作自己的数据集

这篇具有很好参考价值的文章主要介绍了【tensorflow】制作自己的数据集。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝

🥰 博客首页:knighthood2001

😗 欢迎点赞👍评论🗨️

❤️ 热爱python,期待与大家一同进步成长!!❤️

目录

数据集的基本介绍

tensorflow中的数据集

什么是TFDS

安装TFDS

用TFDS加载数据集

实例:将模拟数据制作成内存对象数据集

①生成模拟数据

②定义占位符

③建立session会话,获取并显示模拟数据。

④模拟数据可视化

运行结果

改进:创建带有迭代值并支持乱序功能的模拟数据集 


数据集的基本介绍

        数据集是样本的集合,在深度学习中,数据集用于模型训练。再用tensorflow框架开发深度学习模型之前,需要为模型准备好数据集。在训练模型环节,程序需要从数据集中不断地将数据输入模型,模型通过对注入数据的计算来学习特征。

tensorflow中的数据集

tensorflow中有4种数据集格式

        内存对象数据集:直接用字典变量feed_dict,通过注入模式向模型中输入数据。该数据集适用于少量的数据集输入。

        TFRecord数据集:用队列式管道(tfrecord)向模型输入数据。该数据集适用大量的数据集输入。

        Dataset数据集:通过性能更高的输入管道(tf.data)向模型输入数据。该数据集适用于tensorflow1.4之后的版本。

        tf.keras接口数据集:支持tf.keras语法的数据集接口。该数据集适用于tensorflow1.4之后的版本。

什么是TFDS

        TFDS是tensorflow中的数据集集合模块,该模块将常用的数据及封装起来,实现自动下载与统一的调用接口,为开发模型提供了便利。

安装TFDS

要求:tensorflow版本在1.12及以上。安装命令如下:

pip install tensorflow-datasets

用TFDS加载数据集

这里以minst数据集为例

import tensorflow_datasets as tfds
print(tfds.list_builders())
ds_train, ds_test = tfds.load(name='mnist', split=["train", "test"])
ds_train = ds_train.shuffle(1000).batch(128).prefetch(10)
for features in ds_train.take(1):
    image, label = features["image"], ["label"]

重要结果如下:

Downloading and preparing dataset Unknown size (download: Unknown size, generated: Unknown size, total: Unknown size) to ~\tensorflow_datasets\mnist\3.0.1...

Dataset mnist downloaded and prepared to ~\tensorflow_datasets\mnist\3.0.1. Subsequent calls will reuse this data.

实例:将模拟数据制作成内存对象数据集

        本实例将用内存中的模拟数据来制作成数据集,生成的数据集被直接存放在python内存对象中,这样做的好处--数据集的制作可以独立于任何框架

        本实例将生成一个模拟y≈2x的数据集,并通过静态图的方式显示出来。

步骤如下:

①生成模拟数据

②定义占位符

③建立session会话,获取并显示模拟数据。

④模拟数据可视化

①生成模拟数据

        在样本制作过程中,最忌讳的是一次性将数据都放入内存中,如果数据量很大,这样容易造成内存用尽,即使是模拟数据,也不建议将数据全部生成以后一次性放入内存中,一般做法是:

Ⅰ创建一个模拟数据生成器,

Ⅱ每次只生成指定批次的样本

这样就在迭代过程中,就可以用“随用随制作”的方法来获取样本数据。

        下面定义GenerateData函数来生成模拟数据,并将GenerateData函数的返回值设为以生成器方式返回。这种做法使内存被占用的最少

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

tf.compat.v1.disable_v2_behavior()

#在内存中生成模拟数据
def GenerateData(batchsize = 100):
    train_X = np.linspace(-1, 1, batchsize)   #train_X为-1到1之间连续的100个浮点数
    train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.3 # y=2x,但是加入了噪声
    yield train_X, train_Y       #以生成器的方式返回

        函数使用yield,使得函数以生成器的方式返回数据。生成器对象只生成一次,过后便会自动销毁,可以省略大量的内存。

②定义占位符

#定义网络模型结构部分,这里只有占位符张量
Xinput = tf.compat.v1.placeholder("float", (None))
Yinput = tf.compat.v1.placeholder("float", (None))

注意:在正常的模型开发中,这个环节应该是定义占位符和网络结构,在训练模型时,系统会将数据集的输入数据用占位符来代替,并使用静态图的注入机制,将输入数据传入模型进行迭代训练。因为本实例只需要从数据集中获取数据,所以只定义占位符,不需要定义其他网络节点。

③建立session会话,获取并显示模拟数据。

        首先定义数据集的迭代次数,接着建立会话,在会话中使用两层for循环;第一层是按照迭代次数来循环,第二层是对GenerateData函数返回的生成器对象进行循环,并将数据打印出来。

        因为GenerateData函数返回的生成器对象只有一个元素,所以第二层循环也只运行一次。

#建立会话,获取并输出数据
training_epochs = 20  # 定义需要迭代的次数
with tf.compat.v1.Session() as sess:  # 建立会话(session)
    for epoch in range(training_epochs): #迭代数据集20遍
        for x, y in GenerateData(): #通过for循环打印所有的点
            xv,yv = sess.run([Xinput,Yinput],feed_dict={Xinput: x, Yinput: y}) #通过静态图注入的方式,传入数据

            print(epoch,"| x.shape:",np.shape(xv),"| x[:3]:",xv[:3])
            print(epoch,"| y.shape:",np.shape(yv),"| y[:3]:",yv[:3])

代码开始定义了数据集的迭代次数,这个参数在训练模型中才会用到。

④模拟数据可视化

#显示模拟数据点
train_data = list(GenerateData())[0]
plt.plot(train_data[0], train_data[1], 'ro', label='Original data')
plt.legend()
plt.show()

运行结果

...
17 |x.shape: (100,) |x[:3]: [-1.         -0.97979796 -0.959596  ]
17 |y.shape: (100,) |y[:3]: [-2.0945473 -2.1236315 -1.6280223]
18 |x.shape: (100,) |x[:3]: [-1.         -0.97979796 -0.959596  ]
18 |y.shape: (100,) |y[:3]: [-2.022675  -2.118289  -1.8735064]
19 |x.shape: (100,) |x[:3]: [-1.         -0.97979796 -0.959596  ]
19 |y.shape: (100,) |y[:3]: [-2.0080116 -2.5169287 -1.6713679]

每行数据被|符号划分为3块区域,分别为:迭代次数、数据的形状、前三个元素的值。

可视化结果如下

数据集制作,深度学习,深度学习,tensorflow,人工智能,计算机视觉

改进:创建带有迭代值并支持乱序功能的模拟数据集 

优化如下:

①将数据集与 迭代功能绑定在一起,让代码变得更简洁。

②对数据集进行乱序排序,让生成的x数据无规则 。

通过对数据集的乱序,可以消除样本中无用的特征,从而大大提升模型的泛化能力。

注意:

在乱序操作部分使用的是sklearn.utils库中的shuffle()方法。要使用,首先需要安装,命令如下:

pip install sklearn

改进后全部代码如下: 

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from sklearn.utils import shuffle
tf.compat.v1.disable_v2_behavior()

def GenerateData(training_epochs,batchsize=100):
    for i in range(training_epochs):
        train_X=np.linspace(-1,1,batchsize)
        train_Y=2*train_X+np.random.randn(*train_X.shape)*0.3
        yield shuffle(train_X,train_Y),i

Xinput=tf.compat.v1.placeholder("float",(None))
Yinput=tf.compat.v1.placeholder("float",(None))

training_epochs=20
with tf.compat.v1.Session() as sess:
    for (x,y),ii in GenerateData(training_epochs):
        xv,yv=sess.run([Xinput,Yinput],feed_dict={Xinput:x,Yinput:y})
            
        print(ii,"|x.shape:",np.shape(xv),"|x[:3]:",xv[:3])
        print(ii,"|y.shape:",np.shape(yv),"|y[:3]:",yv[:3])
            
train_data=list(GenerateData(1))[0]
plt.plot(train_data[0][0],train_data[0][1],'ro',label='Original data')
plt.legend()
plt.show()

可视化结果图片如下:

数据集制作,深度学习,深度学习,tensorflow,人工智能,计算机视觉文章来源地址https://www.toymoban.com/news/detail-787882.html

到了这里,关于【tensorflow】制作自己的数据集的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 通信调制信号及时频图数据集制作(MATLAB)

    实现平台:MATLAB2022b         首先产生调制信号,包括八种数字调制类型和三种模拟调制类型: 二相相移键控 (BPSK) 四相相移键控 (QPSK) 八相相移键控 (8-PSK) 十六相正交幅值调制 (16-QAM) 六十四相正交幅值调制 (64-QAM) 四相脉冲幅值调制 (PAM4) 高斯频移键控 (GFSK) 连续相位频移

    2024年02月08日
    浏览(46)
  • 使用KITTI数据集的激光雷达数据(数据预处理+数据集制作+训练)

    目录 1.前言 2. 数据集简介 2.1采集区域 2.2采集平台 3. 激光雷达数据位置 4. 激光雷达数据标签含义 5. 数据预处理与训练 5.1配置openpcdet 5.2数据预处理 5.2.1数据集目录整理 5.2.2数据集格式转化 5.3训练 做激光雷达感知相关工作离不开数据集,激光雷达数据标注价格较高,可选的开

    2024年02月09日
    浏览(55)
  • yolov8-pose姿态估计数据集制作(一)

    最近在搞yolo-pose姿态识别算法,现成的模型已经挺好用了,但是在某些特定的场景下,还是识别不准。所以想着自己搞搞数据,查了网上相关的博客,基本思路都是先按照coco格式来标,然后再转化成yolo格式。不废话,直接说咋干。 这里推荐使用CVAT,好用,没啥说。GitHub链接

    2024年02月11日
    浏览(44)
  • 【GAN】pix2pix算法的数据集制作

    以代码在pycharm中运行为例: 点击上图中的“编辑配置”,如下图: 编辑上图中画红线地方Parameters:

    2024年02月10日
    浏览(38)
  • YOLO 算法的自定义数据集制作及模型训练方法(附代码)

    本文章主要涉及以下工作:    (1)详细介绍了怎样制作YOLO的自定义数据集以及如何使用自定义数据集训练YOLO模型。    (2)对YOLOv5、YOLOv6、YOLOv7、YOLOv8进行了部分修改,能够适配自定义数据集进行训练。    (3)提供了各YOLO算法的目标检测模型的预训练权重。    (

    2024年02月13日
    浏览(41)
  • 【计算机图形学】【代码复现】A-SDF中的数据集制作与数据生成

    Follow A-SDF 的 Data Generation 部分: We follow (1) ANSCH to create URDF for shape2motion dataset (1-2) URDF2OBJ(本人认为是1-2之间需要进行的重要的过渡部分) (2) Manifold to create watertight meshes (3) and modified mesh_to_sdf for generating sampled points and sdf values. follow这个github: ANSCH 在 global_info.py 中,主要修改

    2024年02月08日
    浏览(56)
  • python实现视频抽帧,文件批量操作,文件批量处理(数据集制作的工具箱)

    环境准备 数据集制作 文件批量重命名 文件批量移动 将文件批量按照一定格式进行重命名 修改xml文件内容的方法 Pathlib库的常用接口 在计算机视觉项目中,文件批量操作和文件批量预处理是必不可少的步骤。它们涉及处理大量的图像文件,包括读取、处理、保存和预处理。

    2024年02月09日
    浏览(72)
  • win11系统AVA2.1数据集制作、训练、测试、本地视频验证(完整已跑通)

    本文参照杨帆老师的博客,根据自己的需要进行制作,杨帆老师博客原文链接如下: 自定义ava数据集及训练与测试 完整版 时空动作/行为 视频数据集制作 yolov5, deep sort, VIA MMAction, SlowFast-CSDN博客 文章浏览阅读2.2w次,点赞31次,收藏165次。前言这一篇博客应该是我花时间最多

    2024年02月19日
    浏览(54)
  • YOLOv5训练大规模的遥感实例分割数据集 iSAID从切图到数据集制作及训练

    最近想训练遥感实例分割,纵观博客发现较少相关 iSAID数据集的切分及数据集转换内容,思来想去应该在繁忙之中抽出时间写个详细的教程。 iSAID数据集链接 下载上述数据集。 百度网盘中的train和val中包含了实例和语义分割标签。 上述过程只能下载标签,原始图像为DOTA,

    2024年02月04日
    浏览(67)
  • 深度学习——制作自己的VOC图像分割数据集

    1、数据集介绍 COCO数据集有80个类别,VOC数据集有20个类别。当这些数据集类别中没有自己需要的时候,就需要自己动手做自己的数据集了。 我自己在做数据集的时候主要使用到了labelme和labelImg两个工具。labelme主要是制作语义分割数据集(ImageSets,JPEGImages,SegmentationClass,Segmenta

    2024年02月04日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包