《昇思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语言中的类型转换 基本概念:赋值运算符左右两侧类型不同,或形参与实参类型不匹配…

51单片机通过控制寄存器控制设备,那么程序中变量的运算职责由谁完成的呢

在51单片机(或更广泛地说,在任何微控制器或微处理器系统中)的程序执行过程中,变量的运算职责主要由中央处理器(CPU)完成。CPU 负责执行程序中的指令,包括对各种变量进行算术和逻辑运算。 当你编…

【Android build异常】androidx导致

现象: 增加 implementation androidx.activity:activity:1.8.0后,导致build失败: 提示SDK Java_Home 1.8 而当前需要11。修改settings-Gradle为11仍不起作用。解决: 删除该行引用。 拓展: 1、compileSdkVersion …

如何在宝塔面板中配置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…

linux使用Shell脚本实现内存监控告警

1.实现步骤: 1.获取当前内存情况 2.配置邮件告警,邮件信息是内存剩余状况 3.开发脚本判断内存是否小于150M,if判断 4.crontab加入脚本写规则 2.脚本文件: 在/tmp/下脚本名为Free_warn.sh #!/bin/bash Free_mem free -m | awk NR2 {pr…

基于单片机的 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%车型,包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对照…

闲鱼商品详情数据接口(goodfish.item_get)

闲鱼(一个由阿里巴巴集团运营的二手交易平台)并没有公开一个名为 goodfish.item_get 的官方API接口。闲鱼(Xianyu)的API通常是私有的,主要面向其官方合作伙伴或经过特殊授权的开发者。 如果你想要获取闲鱼上的商品详情…

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

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

zookeeper服务介绍

zookeeper 基础概念安装使用 基础概念 ZooKeeper是一个分布式协调服务,主要用于管理和协调大型分布式系统。它提供了一些基本功能,例如配置维护、名字服务、分布式同步和组服务,这些功能对于分布式应用程序的正常运行至关重要。 主要功能 配…

PHP中单引号双引号

在 PHP 中,字符串可以用单引号()或双引号(")括起来,但它们对变量和特殊字符的处理方式是不同的。 双引号(" ") 双引号内的变量会被解析并替换为其值。 某些特殊字符…

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

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

中英双语介绍美国的州:宾夕法尼亚州(Pennsylvania)

中文版 宾夕法尼亚州(Pennsylvania)位于美国东北部和中大西洋地区,是美国历史最悠久的州之一,拥有丰富的历史遗产和多样的经济结构。以下是对宾夕法尼亚州各方面的详细介绍: 发音: Pennsylvania 美 [ˌpe…