PyTorch?Dataset與DataLoader使用超詳細講解
一、Dataset
Dataset 類提供一種方式去獲取數(shù)據(jù)及其標簽
主要有兩個目的:
- 獲取每一個數(shù)據(jù)及其標簽
- 獲取數(shù)據(jù)的總量大小
1. 在控制臺進行操作
Hymenoptera (膜翅目昆蟲)數(shù)據(jù)集下載地址:
鏈接: https://pan.baidu.com/s/1XKwXsAtE2yzZW2IsvBDpnw?pwd=8a5t
提取碼: 8a5t
這是一個螞蟻蜜蜂二分類的數(shù)據(jù)集,通常數(shù)據(jù)集有以下三種組織形式(上面的數(shù)據(jù)集屬于第一種):
- 不同的類別以文件夾的形式存在,文件夾中是該類別的圖片
- 圖片與標簽分別存儲,圖片在一個文件夾下,
label
信息在另一個文件夾下 label
直接寫在圖片名稱里
①獲取圖片的基本信息
在Pycharm 中,點擊下方的PythonConsole進入控制臺進行操作(通過控制臺可以看到變量的詳細信息)
首先加載圖片,逐行輸入下方代碼:
from PIL import Image img_path = "./dataset/hymenoptera_data/train/ants/0013035.jpg" img = Image.open(img_path)
此時我們就可以在右側看到相關變量的信息:
點擊img
變量,可以查看圖片的詳細信息。通過控制臺執(zhí)行程序能夠直觀地獲取后續(xù)操作所需的數(shù)據(jù):
最后可以通過img.show()
打開圖片查看:
②獲取文件的基本信息
同樣還是在控制臺逐行輸入以下代碼:
dir_path = "dataset/hymenoptera_data/train/ants" import os img_path_list = os.listdir(dir_path) img_path_list[0]
我們就可以獲取到文件夾下的文件名稱,由于是使用控制臺,我們還可以在右側查看列表的詳細信息:
因此在控制臺操作是有很大的優(yōu)點的,我們可以在控制臺逐行執(zhí)行已經(jīng)編寫好的文件中的語句,通過查看右側變量的值來判斷程序?qū)懙氖欠裼袉栴}
2. 編寫一個繼承Dataset 的類加載數(shù)據(jù)
下面的代碼也可以在控制臺運行(可以多行復制粘貼)來檢驗程序是否有誤
①定義 MyData類
導入所需頭文件:
from torch.utils.data import Dataset from PIL import Image import os
定義MyData
類:
__init__
:初始化函數(shù)__getitem__
:返回指定下標的圖片和標簽__len__
:返回數(shù)據(jù)集的大小
class MyData(Dataset): def __init__(self, root_dir, label_dir): self.root_dir = root_dir self.label_dir = label_dir self.path = os.path.join(self.root_dir, self.label_dir) self.img_path = os.listdir(self.path) def __getitem__(self, idx): img_name = self.img_path[idx] img_item_path = os.path.join(self.root_dir, self.label_dir, img_name) img = Image.open(img_item_path) label = self.label_dir return img, label def __len__(self): return len(self.img_path)
其中os.path.join()
可以實現(xiàn)多個路徑的合并且不出錯
②創(chuàng)建類的實例并調(diào)用
創(chuàng)建 MyData
類的實例:
if __name__ == "__main__": root_dir = "../dataset/hymenoptera_data/train" ants_label_dir = "ants" bees_label_dir = "bees" ants_dataset = MyData(root_dir, ants_label_dir) bees_dataset = MyData(root_dir, bees_label_dir)
調(diào)用類中寫好的函數(shù):
img, label = ants_dataset.__getitem__(3) print(ants_dataset.__len__(), label) img.show()
同時我們也可以通過下面這種方式用已有的數(shù)據(jù)集來創(chuàng)造數(shù)據(jù)集:
train_dataset = ants_dataset + bees_dataset
二、DataLoader
- DataLoader 類是為后面的網(wǎng)絡提供不同的數(shù)據(jù)形式
- DataLoader 會根據(jù)
batch_size
的值對數(shù)據(jù)進行打包 - 導入所需的包
import torchvision from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriter
加載數(shù)據(jù):
test_data = torchvision.datasets.CIFAR10("./dataset", train=False, transform=torchvision.transforms.ToTensor()) test_loader = DataLoader(dataset=test_data, batch_size=64, shuffle=True, num_workers=0, drop_last=True)
測試:
img, target = test_data[0] print(img.shape) print(target)
進行日志記錄,開始訓練:
writer = SummaryWriter("dataloader") for epoch in range(2): step = 0 for data in test_loader: imgs, targets = data print(imgs.shape) print(targets) writer.add_images("Epoch: {}".format(epoch), imgs, step) step = step + 1 writer.close()
到此這篇關于PyTorch Dataset與DataLoader使用超詳細講解的文章就介紹到這了,更多相關PyTorch Dataset與DataLoader內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python之torch.no_grad()函數(shù)使用和示例
這篇文章主要介紹了Python之torch.no_grad()函數(shù)使用和示例,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03Python爬取動態(tài)網(wǎng)頁中圖片的完整實例
這篇文章主要給大家介紹了關于Python爬取動態(tài)網(wǎng)頁中圖片的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03Python實現(xiàn)將Word和Excel文件轉換為PPT
在日常工作中,我們經(jīng)常需要將多個Word文檔或Excel表格的內(nèi)容匯總到一個PPT演示文稿中,手動執(zhí)行這項任務可能非常耗時,因此,使用Python自動化這個過程可以大大提高效率,所以本文給大家介紹了Python實現(xiàn)將Word和Excel文件轉換為PPT,需要的朋友可以參考下2024-08-08