《昇思25天学习打卡营第4天|数据集 Dataset》

文章目录

  • 前言:
  • 今日所学:
    • 1. 数据集加载
    • 2. 数据集迭代
    • 3. 数据集常用操作与自定义数据集


前言:

今天学习的是数据集的内容。首先,数据是深度学习的基石,高质量的数据输入能够在整个深度神经网络中发挥积极作用。MindSpore通过基于Pipeline的数据引擎,实现了高效的数据预处理,这个数据引擎包括数据集(Dataset)和数据变换(Transforms)两部分。其中,Dataset是Pipeline的起点,用于加载原始数据。mindspore.dataset模块提供了内置的文本、图像、音频等数据集加载接口,还学习了自定义数据集的加载等内容。

今日所学:

1. 数据集加载

首先我们学习了数据集的加载,我们使用Mnist数据集作为样例来介绍了mindspore.dataset进行加载的方法,然后因为对应的接口仅支持解压后的数据文件,使用download库来下载数据集并进行解压。代码如下:

# Download data from open datasets
from download import downloadurl = "https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/" \"notebook/datasets/MNIST_Data.zip"
path = download(url, "./", kind="zip", replace=True)

在这里插入图片描述

解压把压缩文件删除之后,我们可以通过加载看到对应的数据类型:

train_dataset = MnistDataset("MNIST_Data/train", shuffle=False)
print(type(train_dataset))

在这里插入图片描述

2. 数据集迭代

在第二个部分,我们学习了数据集的迭代,在数据集进行了加载之后,一般通过迭代的方式来获取数据,然后送入神经网络进行训练。在这个部分当中,我们使用相关的接口来创建了数据迭代器,迭代访问数据。通过如下的一个可视化函数来迭代了九张的图片来进行了一个这个部分的展示。

下面代码定义一个可视化函数,迭代9张图片进行展示:

def visualize(dataset):figure = plt.figure(figsize=(4, 4))cols, rows = 3, 3plt.subplots_adjust(wspace=0.5, hspace=0.5)for idx, (image, label) in enumerate(dataset.create_tuple_iterator()):figure.add_subplot(rows, cols, idx + 1)plt.title(int(label))plt.axis("off")plt.imshow(image.asnumpy().squeeze(), cmap="gray")if idx == cols * rows - 1:breakplt.show()

在这里插入图片描述

3. 数据集常用操作与自定义数据集

在第三个部分,我们讲解了数据集常用的操作。包括了数据集随机shuffle操作来消除数据排列造成的分布不均的问题、map操作来对数据进行预处理操作、batch操作将数据集打包为固定大小的batch从而保证梯度下降的随机性和优化计算量。通过这些数据及常用的操作我们进一步的了解了数据集的相关内容。

然后在之后还根据自定义数据集的内容,讲解了不同方法来自定义数据集下面是相关方法的代码与结果。

可随机访问数据集:

# Random-accessible object as input source
class RandomAccessDataset:def __init__(self):self._data = np.ones((5, 2))self._label = np.zeros((5, 1))def __getitem__(self, index):return self._data[index], self._label[index]def __len__(self):return len(self._data)loader = RandomAccessDataset()
dataset = GeneratorDataset(source=loader, column_names=["data", "label"])for data in dataset:print(data)# list, tuple are also supported.
loader = [np.array(0), np.array(1), np.array(2)]
dataset = GeneratorDataset(source=loader, column_names=["data"])for data in dataset:print(data)

得到如下结果:

[Tensor(shape=[2], dtype=Float64, value= [ 1.00000000e+00,  1.00000000e+00]), Tensor(shape=[1], dtype=Float64, value= [ 0.00000000e+00])]
[Tensor(shape=[2], dtype=Float64, value= [ 1.00000000e+00,  1.00000000e+00]), Tensor(shape=[1], dtype=Float64, value= [ 0.00000000e+00])]
[Tensor(shape=[2], dtype=Float64, value= [ 1.00000000e+00,  1.00000000e+00]), Tensor(shape=[1], dtype=Float64, value= [ 0.00000000e+00])]
[Tensor(shape=[2], dtype=Float64, value= [ 1.00000000e+00,  1.00000000e+00]), Tensor(shape=[1], dtype=Float64, value= [ 0.00000000e+00])]
[Tensor(shape=[2], dtype=Float64, value= [ 1.00000000e+00,  1.00000000e+00]), Tensor(shape=[1], dtype=Float64, value= [ 0.00000000e+00])]
[Tensor(shape=[], dtype=Int64, value= 2)]
[Tensor(shape=[], dtype=Int64, value= 0)]
[Tensor(shape=[], dtype=Int64, value= 1)]

可迭代数据集:

# Iterator as input source
class IterableDataset():def __init__(self, start, end):'''init the class object to hold the data'''self.start = startself.end = enddef __next__(self):'''iter one data and return'''return next(self.data)def __iter__(self):'''reset the iter'''self.data = iter(range(self.start, self.end))return selfloader = IterableDataset(1, 5)
dataset = GeneratorDataset(source=loader, column_names=["data"])for d in dataset:print(d)

得到如下结果:

[Tensor(shape=[], dtype=Int64, value= 1)]
[Tensor(shape=[], dtype=Int64, value= 2)]
[Tensor(shape=[], dtype=Int64, value= 3)]
[Tensor(shape=[], dtype=Int64, value= 4)]

生成器:

# Iterator as input source
# Generator
def my_generator(start, end):for i in range(start, end):yield i# since a generator instance can be only iterated once, we need to wrap it by lambda to generate multiple instances
dataset = GeneratorDataset(source=lambda: my_generator(3, 6), column_names=["data"])for d in dataset:print(d)

得到如下结果:

[Tensor(shape=[], dtype=Int64, value= 3)]
[Tensor(shape=[], dtype=Int64, value= 4)]
[Tensor(shape=[], dtype=Int64, value= 5)]

在这里插入图片描述

以上就是今天我所学习的内容啦~

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

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

相关文章

【UE5.1】Chaos物理系统基础——01 创建可被破坏的物体

目录 步骤 一、通过笔刷创建静态网格体 二、破裂静态网格体 三、“统一” 多层级破裂 四、“簇” 群集化的破裂 五、几何体集的材质 六、防止几何体集自动破碎 步骤 一、通过笔刷创建静态网格体 1. 可以在Quixel Bridge中下载两个纹理,用于表示石块的内外纹…

C++中的类型转换操作符:static_cast reinterpret_cast const_cast dynamic_cast

目录​​​​​​​ C语言中的类型转换 C中的类型转换 C中的类型转换操作符 static_cast reinterpret_cast const_cast volatile关键字 赋值兼容 dynamic_cast C语言中的类型转换 基本概念:赋值运算符左右两侧类型不同,或形参与实参类型不匹配…

如何在宝塔面板中配置SSL证书?

目录 一、申请证书二、登录宝塔面板配置SSL证书一、申请证书 登录华为云,进入“云证书管理服务 CCM”: 点击“购买证书”: 选择“DV(Basic)”->“DigiCert”,点击【立即购买】购买有效期为3个月的免费证书。 申请证书:

JAVA里的object类

public static String toString(Object o) // 获取对象的字符串表现形式 public static boolean equals(Object a, Object b) // 比较两个对象是否相等 public static boolean isNull(Object obj) // 判断对象是否为null pu…

基于单片机的 LED 照明灯智能调光系统设计

摘  要: 社会经济的不断发展,推动了智能化生活的进程,智能调光技术开始广泛应用在生活中,人们也逐渐提高了灯光亮灯率等的要求。基于此,笔者主要设计了基于单片机的 LED 照明灯智能调光系统,希望能够为相关…

骨传导耳机哪个牌子好?精选靠谱好用的TOP5骨传导耳机推荐!

在超过八成的音乐爱好者都面临听力健康问题的当下,骨传导耳机因其独特的听觉体验和对听力的保护,在音频设备市场中备受瞩目。但近期我发现不少用户在选购骨传导耳机时常常受到不专业产品的误导。身为有着5年经验的数码博主,在此提醒大家&…

老师怎样用微信发布期末成绩

老师们,期末季又到了,还在为如何发布成绩而头疼?今天,就让我来分享一些小技巧,让你们在微信上发布成绩更加高效,同时又能保护学生的隐私。 首先,我们要确保成绩的安全性和隐私性。在微信上&…

数据恢复篇:如何在 Android 手机上恢复未保存/删除的 Word 文档

在 Android 手机上访问 Word 文档通常很简单,但是当这些重要文件被删除或未保存时会发生什么?这种情况虽然令人痛苦,但并非毫无希望。到 2024 年,有几种强大的方法来处理此类数据丢失。本指南重点介绍如何在Android手机上恢复已删…

Python | Leetcode Python题解之第208题实现Trie(前缀树)

题目: 题解: class Trie:def __init__(self):self.children [None] * 26self.isEnd Falsedef searchPrefix(self, prefix: str) -> "Trie":node selffor ch in prefix:ch ord(ch) - ord("a")if not node.children[ch]:retur…

2008-2022年款哈弗维修手册和电路图线路图接线图资料更新

经过整理,2005-2022年款长城哈弗全系列已经更新至汽修帮手资料库内,覆盖市面上99%车型,包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对照…

word怎么转换成pdf?分享3种PDF文件转换技巧

word怎么转换成pdf?在日常办公中,将Word转换成PDF可以带来诸多便利。首先,PDF格式具有跨平台的通用性,无论在哪个操作系统或设备上,都能保持文档的原始布局和格式。其次,PDF文件不容易被篡改,可…

【Unity】 HTFramework框架(五十二)使用 HybridCLR 热更新

更新日期:2024年7月1日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 HybridCLR 热更新一、启用宏定义二、导入HybridCLR三、设置热更新程序集四、资源、代码热更 HybridCLR 热更新 HybridCLR是一个特性完整、零成本、高性能…

Mac多线程下载管理器:Neat Download Manage 最新版

Neat Download Manager(NDM)是一款功能强大的下载管理软件,它可以帮助用户更有效地管理和下载网络资源。这款软件支持多种浏览器和协议,可以提升下载速度,恢复中断的下载任务,以及自动化下载过程。在使用任…

如何设置农历日程提醒 农历提醒小妙招

在中国,农历仍然承载着深厚的文化传统和民俗意义。无论是庆祝传统节日,还是纪念亲朋的生日,农历日期都显得格外重要。然而,随着生活节奏的加快,我们有时会因忙碌而遗忘这些特殊的日子。这时,一个能够准确提…

游戏AI的创造思路-技术基础-关于艾宾浩斯遗忘曲线的迷思

对于艾宾浩斯遗忘曲线和函数,我一直都有小小的迷思,总想实验下用艾宾浩斯函数来替换sigmoid函数作为激活函数,打造更接近人类的AI算法,这篇文章旨在讨论下 目录 3.10. 艾宾浩斯曲线 3.10.1. 定义 3.10.1.1. 曲线计算公式 3.10…

干货分享:Spring中经常使用的工具类(提示开发效率)

环境:Spring5.3…30 1、资源工具类 ResourceUtils将资源位置解析为文件系统中的文件的实用方法。 读取classpath下文件 File file ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX "logback.xml") ; // ...读取文件系统文件 file Resou…

【刷题汇总--数字统计、两个数组的交集、点击消除(栈)】

C日常刷题积累 今日刷题汇总 - day0011、数字统计1.1、题目1.2、思路1.3、程序实现 2、两个数组的交集2.1、题目2.2、思路2.3、程序实现 3、点击消除(栈)3.1、题目3.2、思路3.3、程序实现 今日刷题汇总 - day001 1、数字统计 1.1、题目 请统计某个给定范围[L, R]的所有整数中…

百事可乐推出具有视频屏幕和人工智能技术的智能罐头

在最近于法国戛纳举行的国际创意节上,百事公司推出了创新的智能罐头。这些罐头不同于传统产品,它们采用了环绕式3D屏幕,能够展示高清视频内容,为品牌宣传和促销带来了全新的视角。经过两年多的精心研发,这些智能罐成为…

LLM原生开发路线图指南

引言 大型语言模型(LLM)正在迅速成为现代人工智能的基石。然而,目前还没有出现公认的最佳实践,而且先驱们往往没有明确的开发路线图。因此,这种状况急需要有人重新发明有关轮子;否则,将会使人陷…