【深度學習入門篇 ③】PyTorch的數據加載

【🍊 易編橙:一個幫助編程小伙伴少走彎路的終身成長社群🍊 】

大家好,我是小森( ﹡?o?﹡ ) ! 易編橙·終身成長社群創始團隊嘉賓,橙似錦計劃領銜成員、阿里云專家博主、騰訊云內容共創官、CSDN人工智能領域優質創作者 。


掌握PyTorch數據通常的處理方法,是構建高效、可擴展模型的關鍵一步。今天,我們就利用PyTorch高效地處理數據,為模型訓練打下堅實基礎。

在前面的線性回歸模型中,我們使用的數據很少,所以直接把全部數據放到模型中去使用。

但是在深度學習中,數據量通常是都非常多,非常大的,如此大量的數據,不可能一次性的在模型中進行向前的計算和反向傳播,經常我們會對整個數據進行隨機的打亂順序,把數據處理成一個個的batch,同時還會對數據進行預處理。

所以,接下來我們來學習pytorch中的數據加載的方法~

Dataset基類介紹

dataset定義了這個數據集的總長度,以及會返回哪些參數,模板:

from torch.utils.data import Datasetclass MyDataset(Dataset):def __init__(self, ):# 定義數據集包含的數據和標簽def __len__(self):return len(...)def __getitem__(self, index):# 當數據集被讀取時,返回一個包含數據和標簽的元組

數據加載案例

數據來源:http://archive.ics.uci.edu/ml/datasets/SMS+Spam+Collection

該數據集包含了5574條短信,其中正常短信(標記為“ham”)4831條,騷擾短信(標記為“spam”)743條。

from torch.utils.data import Dataset,DataLoader
import pandas as pddata_path = r"data/SMSSpamCollection"    # 路徑class SMSDataset(Dataset):def __init__(self):lines = open(data_path,"r",encoding="utf-8")# 前4個為label,后面的為短信內容lines = [[i[:4].strip(),i[4:].strip()] for i in lines]# 轉為dataFrame類型self.df = pd.DataFrame(lines,columns=["label","sms"])def __getitem__(self, index):single_item = self.df.iloc[index,:]return single_item.values[0],single_item.values[1]def __len__(self):return self.df.shape[0]

我們現在已經成功地構建了一個數據集類?SMSDataset,這個類能夠加載SMS 垃圾短信數據集,并將每條短信及其對應的標簽(ham?或?spam)封裝為可迭代的形式,以便于后續的數據加載和模型訓練。

d = SMSDataset()
for i in range(len(d)):print(i,d[i])

輸出:

...
5566 ('ham', "Why don't you wait 'til at least wednesday to see if you get your .")
5567 ('ham', 'Huh y lei...')
5568 ('spam', 'REMINDER FROM O2: To get 2.50 pounds free call credit and details of great offers pls reply 2 this text with your valid name, house no and postcode')
5569 ('spam', 'This is the 2nd time we have tried 2 contact u. U have won the £750 Pound prize. 2 claim is easy, call 087187272008 NOW1! Only 10p per minute. BT-national-rate.')
5570 ('ham', 'Will ü b going to esplanade fr home?')
5571 ('ham', 'Pity, * was in mood for that. So...any other suggestions?')
5572 ('ham', "The guy did some bitching but I acted like i'd be interested in buying something else next week and he gave it to us for free")
5573 ('ham', 'Rofl. Its true to its name')

?DataLoader格式說明

my_dataset = DataLoader(mydataset, batch_size=2, shuffle=True,num_workers=4)# num_workers:多進程讀取數據

DataLoader的使用方法示例: ?

from torch.utils.data import DataLoaderdataset = MyDataset()
data_loader = DataLoader(dataset=dataset,batch_size=10,shuffle=True,num_workers=2)#遍歷,獲取其中的每個batch的結果
for index, (label, context) in enumerate(data_loader):print(index,label,context)print("*"*100)
  1. dataset:提前定義的dataset的實例

  2. batch_size:傳入數據的batch的大小,常用128,256等等

  3. shuffle:bool類型,表示是否在每次獲取數據的時候提前打亂數據

  4. num_workers:加載數據的線程數 ?

導入兩個列表到Dataset

class MyDataset(Dataset):def __init__(self, ):# 定義數據集包含的數據和標簽self.x_data = [i for i in range(10)]self.y_data = [2*i for i in range(10)]def __len__(self):return len(self.x_data)def __getitem__(self, index):# 當數據集被讀取時,返回一個包含數據和標簽的元組return self.x_data[index], self.y_data[index]mydataset = MyDataset()
my_dataset = DataLoader(mydataset)for x_i ,y_i in my_dataset:print(x_i,y_i)

💬輸出:

tensor([0]) tensor([0])
tensor([1]) tensor([2])
tensor([2]) tensor([4])
tensor([3]) tensor([6])
tensor([4]) tensor([8])
tensor([5]) tensor([10])
tensor([6]) tensor([12])
tensor([7]) tensor([14])
tensor([8]) tensor([16])
tensor([9]) tensor([18])

?💬如果修改batch_size為2,則輸出:

tensor([0, 1]) tensor([0, 2])
tensor([2, 3]) tensor([4, 6])
tensor([4, 5]) tensor([ 8, 10])
tensor([6, 7]) tensor([12, 14])
tensor([8, 9]) tensor([16, 18])
  • 我們可以看出,這是管理每次輸出的批次的
  • 還可以控制用多少個線程來加速讀取數據(Num Workers),這參數和電腦cpu核心數有關系,盡量不超過電腦的核心數

我們看到可以不使用DataLoader,但這樣就不能批次處理,只能for i in range(len(d))這樣得到數據,也不能自動實現打亂邏輯,也不能串行加載。

data_loader = DataLoader(dataset=Dataset,batch_size=10,shuffle=True,num_workers=2)
# 獲取其中的每個batch的結果
for index, (label, context) in enumerate(data_loader):print(index,label,context)print("*"*100)

輸出:

555 ('ham', 'ham', 'ham', 'ham', 'ham', 'ham', 'ham', 'ham', 'ham', 'spam') ("I forgot 2 ask ü all smth.. There's a card on da present lei... How? ü all want 2 write smth or sign on it?", 'Am i that much dirty fellow?', 'have got * few things to do. may be in * pub later.', 'Ok lor. Anyway i thk we cant get tickets now cos like quite late already. U wan 2 go look 4 ur frens a not? Darren is wif them now...', 'When you came to hostel.', 'Well i know Z will take care of me. So no worries.', 'I REALLY NEED 2 KISS U I MISS U MY BABY FROM UR BABY 4EVA', 'Booked ticket for pongal?', 'Awww dat is sweet! We can think of something to do he he! Have a nice time tonight ill probably txt u later cos im lonely :( xxx.', 'We tried to call you re your reply to our sms for a video mobile 750 mins UNLIMITED TEXT + free camcorder Reply of call 08000930705 Now')
****************************************************************************************************
556 ('ham', 'ham', 'ham', 'ham', 'ham', 'ham', 'ham', 'ham', 'ham', 'spam') (':-( sad puppy noise', 'G.W.R', 'Otherwise had part time job na-tuition..', 'They finally came to fix the ceiling.', 'The word "Checkmate" in chess comes from the Persian phrase "Shah Maat" which means; "the king is dead.." Goodmorning.. Have a good day..:)', 'Yup', 'I am real, baby! I want to bring out your inner tigress...', 'THANX4 TODAY CER IT WAS NICE 2 CATCH UP BUT WE AVE 2 FIND MORE TIME MORE OFTEN OH WELL TAKE CARE C U SOON.C', "She said,'' do u mind if I go into the bedroom for a minute ? '' ''OK'', I sed in a sexy mood. She came out 5 minuts latr wid a cake...n My Wife,", 'Ur cash-balance is currently 500 pounds - to maximize ur cash-in now send COLLECT to 83600 only 150p/msg. CC: 08718720201 PO BOX 114/14 TCR/W1')
****************************************************************************************************
557 ('ham', 'ham', 'ham', 'ham') ('It shall be fine. I have avalarr now. Will hollalater', "Nah it's straight, if you can just bring bud or drinks or something that's actually a little more useful than straight cash", 'U sleeping now.. Or you going to take? Haha.. I got spys wat.. Me online checking n replying mails lor..', 'In other news after hassling me to get him weed for a week andres has no money. HAUGHAIGHGTUJHYGUJ')
****************************************************************************************************

導入Excel數據到Dataset中

💥dataset只是一個類,因此數據可以從外部導入,我們也可以在dataset中規定數據在返回時進行更多的操作,數據在返回時也不一定是有兩個。

pip install pandas
pip install openpyxl
class myDataset(Dataset):def __init__(self, data_loc):data = pd.read_ecl(data_loc)self.x1,self.x2,self.x3,self.x4,self.y = data['x1'],data['x2'],data['x3'] ,data['x4'],data['y']def __len__(self):return len(self.x1)def __getitem__(self, idx):return self.x1[idx],self.x2[idx],self.x3[idx],self.x4[idx],self.y[idx]mydataset = myDataset(data_loc='e:\pythonProject Pytorch1\data.xls')
my_dataset = DataLoader(mydataset,batch_size=2)
for x1_i ,x2_i,x3_i,x4_i,y_i in my_dataset:print(x1_i,x2_i,x3_i,x4_i,y_i)

💯加載官方數據集?

有一些數據集是PyTorch自帶的,它被保存在TorchVisiontorchtext

  1. torchvision提供了對圖片數據處理相關的api和數據

    • 數據位置:torchvision.datasets,例如:torchvision.datasets.MNIST(手寫數字圖片數據)

  2. torchtext提供了對文本數據處理相關的API和數據

    • 數據位置:torchtext.datasets,例如:torchtext.datasets.IMDB(電影評論文本數據)

我們以Mnist手寫數字為例 ,看看pytorch如何加載其中自帶的數據集

torchvision.datasets.MNIST(root='/files/', train=True, download=True, transform=)`
  1. root參數表示數據存放的位置

  2. train:bool類型,表示是使用訓練集的數據還是測試集的數據

  3. download:bool類型,表示是否需要下載數據到root目錄

  4. transform:實現的對圖片的處理函數

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

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

相關文章

【漏洞復現】宏景HCM-LoadOtherTreeServlet SQL注入

聲明:本文檔或演示材料僅用于教育和教學目的。如果任何個人或組織利用本文檔中的信息進行非法活動,將與本文檔的作者或發布者無關。 一、漏洞描述 宏景HCM人力資源信息管理系統是一個全面的人力資源管理軟件,它覆蓋了人力資源管理的各個模塊…

報錯:python擴展中的調試器不再支持小于3.7的python版本(debugpy)

報錯:python擴展中的調試器不再支持小于3.7的python版本 原因1: debugpy的版本問題原因2 原因1: debugpy的版本問題 是debugpy和你vscode安裝的python解釋器不匹配,根據你使用的python解釋器的版本重新安裝一個debugpy。 原因2 …

華為官方出品:《應用現代化實踐指南》電子書,可免費下載

本期云享書庫為各位開發者帶來了應用現代化方面的技術內容。 在數字化時代,企業面臨著前所未有的機遇與挑戰。隨著技術的飛速發展,特別是云計算、大數據、人工智能(AI)和機器學習(ML)的興起,正…

Python爬蟲速成之路(1):獲取網頁源代碼

hello hello~ ,這里是絕命Coding——老白~💖💖 ,歡迎大家點贊🥳🥳關注💥💥收藏🌹🌹🌹 💥個人主頁:絕命Coding-CSDN博客 &a…

C#面:簡述什么是中間件(Middleware)?

中間件是組裝到應?程序管道中以處理請求和響應的軟件。 每個組件: 選擇是否將請求傳遞給管道中的下?個組件。 可以在調?管道中的下?個組件之前和之后執??作。 請求委托(Request delegates)?于構建請求管道,處理每個HTTP請…

Threadlocal使用獲取最后更新人信息

Threadlocal 的作用范圍是一個線程,tomcat啟動默認開啟一個線程 首先點擊登錄,登錄方法會返回token 拿到token后放在請求頭中發送商品的插入請求,在插入是設置拿到token中的nickName(花名)放入(lastUpdate…

windows系統長時間不用,無法喚醒

問題背景 在我們使用windows系統的時候,有這樣一種情況,就是電腦長時間不不操作,就會“睡死”過去。此時再用鼠標鍵盤都無法將其喚醒。沒辦法只能長按電源鍵強制關機,再重啟。那么該如何解決這種問題呢? 原因分析 系…

PLSQL Day7

--9.用戶鍵盤輸入5個數字,將數字按從小到大的順序存入集合中:declare declare type num_type is table of number; n_tab num_type; temp_n number ; begin n_tab: num_type(&n1,&n2,&n3,&n4,&n5); for i in 1..n_tab.co…

高可用hadoop分布式節點的擴容

解決方案 修改hdfs-site.xml 文件 原xml文件 <?xml version"1.0" encoding"UTF-8"?> <?xml-stylesheet type"text/xsl" href"configuration.xsl"?> <!--Licensed under the Apache License, Version 2.0 (th…

編程參考 - 在C++類成員函數聲明中使用const關鍵字

在 C 中&#xff0c;可以在類成員函數聲明中使用 const 關鍵字來表示函數不修改對象的狀態。這就是所謂的 "const 成員函數"。將成員函數聲明為 const 時&#xff0c;意味著該函數承諾不更改對象的任何成員變量&#xff08;標記為可變的變量除外&#xff09;。 In C,…

福克斯波羅 FOXBORO FBM201模塊 控制器 處理器

福克斯波羅 FOXBORO FBM201 控制器具有緊湊和堅固的設計&#xff0c;使其非常適合在惡劣的工業環境中使用。它可以承受極端的溫度&#xff0c;濕度和振動&#xff0c;并且以最少的維護來實現持久的性能。 控制器配備了先進的控制算法&#xff0c;使其能夠快速準確地響應過程條…

Python: 從 2.7 升級到 3,我比 vue 慢了一點點

小破站搜索云前端&#xff0c;查看視頻版 2024 年 7 月 7 日&#xff0c;據一位長期的Python觀察者爆料&#xff0c;Fedora 41 系統最終將停止支持 Python 2.7。這是Python 2系列的最后一個版本&#xff0c;Python 2.7在Fedora Linux 41中將被退役且不再替代。除了PyPy之外&…

利用【Python】【線性規劃】優化工廠生產:實現智能資源配置與利潤最大化的現代解決方案

目錄 1. 問題背景和描述 1.1 問題背景 1.2 問題描述 2. 數學模型的建立 2.1決策變量 2.2 目標函數 2.3 約束條件 2.4 數學模型總結 3. 使用Python解決線性規劃問題 3.1 導入必要的庫 3.2 定義目標函數系數 3.3 定義不等式約束矩陣和向量 3.4 定義變量的邊界 非負…

淺談 Webpack5 模塊聯邦

概念 Webpack 模塊聯邦是一種先進的代碼共享技術&#xff0c;它允許在多個獨立構建的 Web 應用程序之間共享代碼&#xff0c;而無需將這些代碼提前發布到 npm 倉庫或其他中央存儲。 這項技術特別適用于微前端架構&#xff0c;因為它能讓各個前端團隊獨立開發、部署自己的應用…

政安晨:【Keras機器學習示例演繹】(五十二)—— 使用門控殘差和變量選擇網絡進行分類

目錄 簡介 數據集 安裝準備 數據準備 定義數據集元數據 創建用于訓練和評估的 tf.data.Dataset 創建模型輸入 對輸入特征進行編碼 實施門控線性單元 實施門控余留網絡 實施變量選擇網絡 創建門控殘差和變量選擇網絡模型 編譯、訓練和評估模型 政安晨的個人主頁&am…

OpenCV和PIL進行前景提取

摘要 在圖像處理和分析中&#xff0c;前景提取是一項關鍵技術&#xff0c;尤其是在計算機視覺和模式識別領域。本文介紹了一種結合OpenCV和PIL庫的方法&#xff0c;實現在批量處理圖像時有效提取前景并保留原始圖像的EXIF數據。具體步驟包括從指定文件夾中讀取圖像&#xff0c…

【鏈表】- 環形鏈表 II

1. 對應力扣題目連接 環形鏈表 II 2. 實現思路 a. 鏈表圖示&#xff1a; b. 檢測鏈表中是否存在環&#xff0c;即&#xff1a;會相交 思路&#xff1a; 使用 Floyd 的龜兔賽跑算法&#xff08;Floyd’s Tortoise and Hare algorithm&#xff09;&#xff0c;即快慢指針法&…

二分法求函數的零點 信友隊

題目ID&#xff1a;15713 必做題 100分 時間限制: 1000ms 空間限制: 65536kB 題目描述 有函數&#xff1a;f(x) 已知f(1.5) > 0&#xff0c;f(2.4) < 0 且方程 f(x) 0 在區間 [1.5,2.4] 有且只有一個根&#xff0c;請用二分法求出該根。 輸入格式 &#xff08;無…

Mysql查詢近半年每個月有多少天

Mysql 查詢近6個月每個月有多少天&#xff1a; SELECT DATE_FORMAT(DATE_ADD(NOW(),INTERVAL-(CAST( help_topic_id AS SIGNED INTEGER )) MONTH ), %Y-%m) as months,DAY(LAST_DAY(CONCAT(DATE_FORMAT(DATE_ADD(NOW(),INTERVAL-(CAST( help_topic_id AS SIGNED INTEGER )) MO…

【區塊鏈+跨境服務】跨境出口電商溯源 | FISCO BCOS應用案例

當前跨境出口電商已成為帶動我國外貿發展的中堅力量&#xff0c;尤其疫情特殊時期&#xff0c;成為推動經濟增長的一個重要組成 部分。但是跨境出口電商流程長、環節多&#xff0c;且需輾轉于不同的服務商以及國家之間&#xff0c;監管與定位也相對困難&#xff0c;容 易出現諸…