昇思25天學習打卡營第4天|數據集Dataset

數據集 Dataset

介紹

之前說過,MindSpore是基于Pipeline,通過Dataset和Transformer進行數據處理。Dataset在其中是用來加載原始數據的。mindSpore提供了數據集加載接口,可以加載文本、圖像、音頻等,同時也可以自定義加載接口。此外還提供了預加載的數據集,可直接使用。

環境配置

import numpy as np
from mindspore.dataset import vision
from mindspore.dataset import MnistDataset, GeneratorDataset
import matplotlib.pyplot as plt

加載dataset

依然使用之前的圖片及其標簽數據集Mnist

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

數據集迭代

數據集加載后,一般使用迭代的方式獲取數據,再送入神經網絡中訓練。
訪問的數據類型默認為Tensor,可以設置為Numpy output_numpy=True

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()

常用操作

數據集操作采用了異步的執行方式(多虧了pipeline)。具體的表現是,執行操作后會先返回新的dataset,當前未執行具體的操練做,而是在pipeline中加入節點,迭代時才執行整個pipeline。

shuffle

shuffle意思是洗牌,可以改善數據分布不均的問題。

train_dataset = train_dataset.shuffle(buffer_size=64)

map

map實際上不是一個具體的操作,而是對數據集的每一個元素執行指定的數據變換(transformer)并返回這個數據集。變換可能包括簡單的數據清洗函數(如刪除空值)、更復雜的特征工程函數(如對數變換或獨熱編碼),甚至是深度學習模型進行數據增強的函數。

train_dataset = train_dataset.map(vision.Rescale(1.0 / 255.0, 0), input_columns='image')

這里對數據進行了歸一化,即縮放到除以255之后變為0-1之間。
歸一化之前數據類型是uInt8,除以255后自然的產生了小數,變成了float32

batch

這個操作將數據集打包成了固定大小。實際上就是把數據切成了指定大小的小塊。搞成batch之后,可以每次只用加載一小部分到內存中。這解決了大規模數據集無法一次性加載到內存中的問題。

train_dataset = train_dataset.batch(batch_size=32)

經過batch操作之后的dataset會增加一個維度,標記了這個數據的batch_size。

自定義數據集

對于沒有預加載和不能使用api加載的數據集,可構造自定義數據加載類或自定義數據集生成函數的方式來生成數據集。再通過GeneratorDataset接口實現自定義方式的數據集加載。這個接口支持通過以下三種方式構造自定義數據集。

可隨機訪問數據集

實現了__getitem__和__len__方法,可以通過索引或鍵直接訪問相應的數據。

class RandomAccessDataset:
# 初始化data和label為(5,2)形狀的1和(5,1)形狀的0def __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)# RAD作為loader,加載進GeneratorDataset的source,并指定列名
loader = RandomAccessDataset()
dataset = GeneratorDataset(source=loader, column_names=["data", "label"])# 同時source也支持list和tuple
loader = [np.array(0), np.array(1), np.array(2)]
dataset = GeneratorDataset(source=loader, column_names=["data"])

可迭代數據集

實現了__iter__和__next__方法,可以通過迭代的方式逐步獲取數據。

class IterableDataset():def __init__(self, start, end):# 初始化開始和結束數字,用在了后面的_iter_方法中 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 self
loader = IterableDataset(1, 5)
dataset = GeneratorDataset(source=loader, column_names=["data"])
# 這個dataset的輸出就是【1,2,3,4】

生成器

可迭代,直接依賴Python的生成器類型generator返回數據,直至生成器拋出StopIteration異常。

# 經典的使用yield實現生成器
def my_generator(start, end):for i in range(start, end):yield i
dataset = GeneratorDataset(source=lambda: my_generator(3, 6), column_names=["data"])
# dataset的內容是3,4,5

總結

這節學了一些dataset的加載、操作、以及自定義數據集。

打卡憑證

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36870.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36870.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36870.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【UE開發】游戲庫存UI系統Demo

1.項目介紹 1.描述:一種用于存儲記錄玩家物品的游戲內可視化操作系統。 2.演示:https://www.bilibili.com/video/BV1f53neVEfW/?vd_source50dea901fd12253f417c48b937975b0d 3.大綱: 4.樣式: 2.W_Inventory_Main_01(…

CORE Mobility Errorr的調試

在運行CORE tutorial 3中的mobility示例時,出現如下錯誤: 當看到這個問題的時候,并沒有仔細去分析日志和現象,在core-daemon的進程打印界面只看了一下最后的出錯堆棧: 2024-06-27 10:43:48,614 - ERROR - _server:_ca…

MySQL8 新特性——公用表表達式用法 with t1 as (select * from user)

MySQL8 新特性——公用表表達式用法_mysql ctes-CSDN博客 1.普通公用表表達式 MySQL8 新特性——公用表表達式用法 在MySQL 8.0及更高版本中,引入了公用表表達式(Common Table Expressions,CTEs),它是一種方便且可重…

docker部署vue項目

1.下載docker desktop軟件 Docker Desktop啟動的時候,有可能彈框提示"WSL2 installations is incomplete",這是您的系統中沒有安裝WSL2內核的原因,打開【https://aka.ms/wsl2kernel ,在打開的頁面中有一個Linux內核更新包"鏈…

【python011】經緯度點位可視化html生成(有效方案)

1.熟悉、梳理、總結項目研發實戰中的Python開發日常使用中的問題、知識點等,如獲取省市等邊界區域經緯度進行可視化,從而輔助判斷、決策。 2.歡迎點贊、關注、批評、指正,互三走起來,小手動起來! 3.歡迎點贊、關注、批…

Android InputReader 輸入事件處理流程

Android系統輸入事件產生的底層主要是輸入子系統,Android 中的輸入設備有很多,例如屏幕,鼠標,鍵盤等都是輸入設備,對于應用開發者,接觸最多的也就是屏幕了。 1. 當輸入設備可用時,Linux會在 /de…

tensorRT的安裝

在這個網址找到適合自己的版本,尤其是找到合適的cuda版本: https://pypi.nvidia.com/ 然后直接pip 安裝: 比如: pip install https://pypi.nvidia.com/tensorrt-cu11/tensorrt-cu11-10.1.0.tar.gz 也可以: wget http…

【MotionCap】SLAHMR 在 Colab 的demo運行筆記

【MotionCap】SLAHMR slahmr將人類和相機運動與野外視頻分離 CVPR 2023跳至主要內容 SLAHMR (supports 4D Humans).ipynb SLAHMR (supports 4D Humans).ipynb_筆記本已移除星標Google Colab demo for: SLAHMR - Simultaneous Localization And Human Mesh Recovery @inproc…

STM32將外部SDRAM空間作為系統堆(Heap)空間

概述 stm32可以外擴很大的sram,常見外部sram的初始化函數一般是c語言寫的,默認寫在main函數里面。stm32初始化首先進入匯編代碼startup_stm32f429xx.s,在匯編代碼中Reset_Handler(復位中斷服務程序)里面先調用了Syste…

線上書店訂購系統小組作業匯總

1、數據庫模型圖、er圖1、數據庫模型圖、er圖-CSDN博客 2、網上圖書訂購2、網上圖書訂購-CSDN博客 3、簡單查詢與多表聯合復雜查詢MySQL周內訓參照3、簡單查詢與多表聯合復雜查詢-CSDN博客 4、觸發器-插入-修改-刪除MySQL周內訓參照4、觸發器-插入-修改-刪除-CSDN博客 5、存…

亮相夏季達沃斯論壇天津之夜,國窖1573展現國際化新表達

執筆 | 姜 姜 編輯 | 揚 靈 6月25日-27日,以“未來增長的新前沿”為主題的第十五屆新領軍者年會,即2024年夏季達沃斯論壇盛大舉行。26日晚,在2024年夏季達沃斯論壇天津之夜上,國窖1573作為中國民族品牌的代表,以唯一攜…

vue + Lodop 制作可視化設計頁面 實現打印設計功能(二)

歷史: vue2 Lodop 制作可視化設計頁面 實現打印設計功能(一) 前言: 之前本來打算用直接拿之前做的vue2版本改改就發的,但考慮到現在主流都是vue3了,所以從這篇文章開始使用vue3來寫,以及最后…

速盾:cdn加速js

CDN加速是一種將網站內容分布到全球各地的服務器上來提高網站訪問速度和穩定性的技術手段。CDN即內容分發網絡,其核心原理是將靜態資源(例如圖片、CSS、JavaScript文件等)緩存到離用戶最近的服務器節點上,使用戶可以更快地獲取網站…

三相LCL濾波型PWM逆變器仿真設計

參考并網電流外環電容電流前饋內環的雙閉環控制結構,在光伏和風力發電網側變換器中的應用,可以顯著提高系統的穩定性和效率。在并網電流外環中,通過檢測電網電流并與其參考值進行比較,可以得到一個電流誤差信號。這個電流誤差信號…

MySQL基礎查詢與復雜查詢

基礎查詢 1、查詢用戶信息,僅顯示用戶的姓名與手機號,用中文顯示列名。中文顯示姓名列與手機號列。 2、根據商品名稱進行模糊查詢,模糊查詢需要可以走索引,需要給出explain語句。使用explain測試給出的查詢語句,需要顯…

程序員職業發展指南,如何選擇適合自己的就業方向?

隨著科技的發展和數字化時代的到來,程序員是IT行業中的熱門職業。尤其是近幾年移動互聯網的迅速發展,IT人才更是緊缺,越來越多的人加入程序員這個行列。 從事程序員工作,如何接項目呢?YesPMP是一個專注于互聯網外包的平…

【知識學習】闡述Unity3D中動畫渲染的概念及使用方法示例

Unity3D中的卡通渲染(Cartoon Rendering)是一種渲染技術,它模仿傳統手繪動畫或漫畫的視覺效果。這種渲染風格通常具有鮮明的顏色、清晰的輪廓線和簡化的光影效果,常用于制作動畫、游戲和其他視覺媒體。 卡通渲染的基本概念 輪廓…

<sa8650>QCX ISP Tuning 使用詳解 — Tuning前置條件

<sa8650>QCX ISP Tuning 使用詳解 — Tuning前置條件 一 如何安裝 Qualcomm Chromatix? 攝像頭校準工具二 如何使用 Qualcomm Chromatix? tuning工具創建tuning項目2.1 創建工程前提依賴2.2 創建工程2.3 添加場景2.4 編輯區域觸發器三 如何創建Tuning 樹一 如何安裝 Qualco…

postman教程-22-Newman結合Jenkins執行自動化測試

上一小節我們學習了Postman Newman運行集合生成測試報告的方法,本小節我們講解一下Postman Newman結合Jenkins執行自動化測試的方法。 在軟件開發過程中,持續集成(CI)是一種實踐,旨在通過自動化的測試和構建過程來頻繁…

【高等數學】一元函數積分及其應用:定積分與反常積分

文章目錄 第一節. 定積分一. 定積分的概念1. 定義2. 定積分存在定理3. 定積分的幾何意義與求解 二. 定積分的性質1. 不等式2. 中值定理 三. 積分上限(為x)函數1. 積分上限函數定義2. 積分函數求導3. 積分函數的奇偶性變化 四. 定積分的計算 第二節. 反常…