使用python/pytorch讀取數(shù)據(jù)集的示例代碼
MNIST數(shù)據(jù)集
MNIST數(shù)據(jù)集包含了6萬張手寫數(shù)字([1,28,28]尺寸),以特殊格式存儲。本文首先將MNIST數(shù)據(jù)集另存為png格式,然后再讀取png格式圖片,開展后續(xù)訓(xùn)練
另存為png格式
import torch
from torch.utils.data import Dataset
from torchvision.datasets import MNIST
from torch.utils.data import DataLoader
from tqdm import tqdm
from torchvision import models, transforms
from torchvision.utils import save_image
from PIL import Image
#將MNIST數(shù)據(jù)集轉(zhuǎn)換為圖片
tf = transforms.Compose([transforms.ToTensor()]) # mnist is already normalised 0 to 1
datasetMNIST = MNIST("./data", train=True, download=True, transform=tf)
pbar = tqdm(datasetMNIST)
for index, (img,cl) in enumerate(pbar):
save_image(img, f"./data/MNIST_PNG/x/{index}.png")
# 以寫入模式打開文件
with open(f"./data/MNIST_PNG/c/{index}.txt", "w", encoding="utf-8") as file:
# 將字符串寫入文件
file.write(f"{cl}")
注意:MNIST源數(shù)據(jù)存放在./data文件下,如果沒有數(shù)據(jù)也沒關(guān)系,代碼會自動從網(wǎng)上下載。另存為png的數(shù)據(jù)放在了./data/MNIST_PNG/文件下。子文件夾x存放6萬張圖片,子文件夾c存放6萬個文本文件,每個文本文件內(nèi)有一行字符串,說明該對應(yīng)的手寫數(shù)字是幾(標簽)。
讀取png格式數(shù)據(jù)集
class MyMNISTDataset(Dataset):
def __init__(self, data):
self.data = data
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
x = self.data[idx][0] #圖像
y = self.data[idx][1] #標簽
return x, y
def load_data(dataNum=60000):
data = []
pbar = tqdm(range(dataNum))
for i in pbar:
# 指定圖片路徑
image_path = f'./data/MNIST_PNG/x/{i}.png'
cond_path=f'./data/MNIST_PNG/c/{i}.txt'
# 定義圖像預(yù)處理
preprocess = transforms.Compose([
transforms.Grayscale(num_output_channels=1), # 將圖像轉(zhuǎn)換為灰度圖像(單通道)
transforms.ToTensor()
])
# 使用預(yù)處理加載圖像
image_tensor = preprocess(Image.open(image_path))
# 加載條件文檔(tag)
with open(cond_path, 'r') as file:
line = file.readline()
number = int(line) # 將字符串轉(zhuǎn)換為整數(shù),圖像的類別
data.append((image_tensor, number))
return data
data=load_data(60000)
# 創(chuàng)建數(shù)據(jù)集實例
dataset = MyMNISTDataset(data)
# 創(chuàng)建數(shù)據(jù)加載器
dataloader = DataLoader(dataset, batch_size=4, shuffle=True)
pbar = tqdm(dataloader)
for index, (img,cond) in enumerate(pbar):
#這里對每一批進行訓(xùn)練...
print(f"Batch {index}: img = {img.shape}, cond = {cond}")
load_data函數(shù)用于讀取數(shù)據(jù)文件,返回一個data張量。data張量又被用于構(gòu)造MyMNISTDataset類的對象dataset,dataset對象又被DataLoader函數(shù)轉(zhuǎn)換為dataloader。
dataloader事實上按照batch將數(shù)據(jù)集進行了分割,4張圖片一組進行訓(xùn)練。上述代碼的輸出如下:
...... Batch 7847: img = torch.Size([4, 1, 28, 28]), cond = tensor([0, 1, 5, 2]) Batch 7848: img = torch.Size([4, 1, 28, 28]), cond = tensor([2, 2, 6, 0]) Batch 7849: img = torch.Size([4, 1, 28, 28]), cond = tensor([4, 3, 0, 9]) Batch 7850: img = torch.Size([4, 1, 28, 28]), cond = tensor([6, 2, 9, 5]) Batch 7851: img = torch.Size([4, 1, 28, 28]), cond = tensor([7, 2, 4, 4]) Batch 7852: img = torch.Size([4, 1, 28, 28]), cond = tensor([1, 4, 2, 6]) Batch 7853: img = torch.Size([4, 1, 28, 28]), cond = tensor([2, 5, 3, 5]) Batch 7854: img = torch.Size([4, 1, 28, 28]), cond = tensor([7, 1, 0, 1]) Batch 7855: img = torch.Size([4, 1, 28, 28]), cond = tensor([9, 8, 9, 7]) Batch 7856: img = torch.Size([4, 1, 28, 28]), cond = tensor([4, 6, 6, 7]) Batch 7857: img = torch.Size([4, 1, 28, 28]), cond = tensor([7, 4, 1, 6]) Batch 7858: img = torch.Size([4, 1, 28, 28]), cond = tensor([5, 4, 6, 5]) Batch 7859: img = torch.Size([4, 1, 28, 28]), cond = tensor([6, 3, 1, 9]) Batch 7860: img = torch.Size([4, 1, 28, 28]), cond = tensor([5, 5, 8, 6]) Batch 7861: img = torch.Size([4, 1, 28, 28]), cond = tensor([0, 4, 8, 9]) Batch 7862: img = torch.Size([4, 1, 28, 28]), cond = tensor([2, 3, 5, 8]) Batch 7863: img = torch.Size([4, 1, 28, 28]), cond = tensor([8, 0, 0, 6]) ......
到此這篇關(guān)于使用python/pytorch讀取數(shù)據(jù)集的示例代碼的文章就介紹到這了,更多相關(guān)python/pytorch讀取數(shù)據(jù)集內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用url_helper簡化Python中Django框架的url配置教程
這篇文章主要介紹了使用url_helper簡化Python中Django框架的url配置教程,需要的朋友可以參考下2015-05-05
Python如何telnet到網(wǎng)絡(luò)設(shè)備
這篇文章主要介紹了Python如何telnet到網(wǎng)絡(luò)設(shè)備,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2021-02-02
Python cookbook(數(shù)據(jù)結(jié)構(gòu)與算法)實現(xiàn)查找兩個字典相同點的方法
這篇文章主要介紹了Python實現(xiàn)查找兩個字典相同點的方法,涉及Python常見集合運算操作技巧,需要的朋友可以參考下2018-02-02
python環(huán)境搭建Makefile簡單使用步驟
Makefile是一種自動化構(gòu)建工具,通過定義規(guī)則、依賴關(guān)系和執(zhí)行命令,替代手動重復(fù)敲編譯、運行和清理等指令,提升開發(fā)效率,本文給大家介紹python環(huán)境搭建Makefile簡單使用方法,感興趣的朋友跟隨小編一起看看吧2026-02-02
Django框架實現(xiàn)的普通登錄案例【使用POST方法】
這篇文章主要介紹了Django框架實現(xiàn)的普通登錄案例,結(jié)合實例形式分析了Django框架使用POST方法進行頁面登錄、校驗等相關(guān)操作技巧,需要的朋友可以參考下2019-05-05

