日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【小白学习PyTorch教程】十七、 PyTorch 中 数据集torchvision和torchtext

發(fā)布時(shí)間:2024/10/8 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【小白学习PyTorch教程】十七、 PyTorch 中 数据集torchvision和torchtext 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

@Author:Runsen

對(duì)于PyTorch加載和處理不同類型數(shù)據(jù),官方提供了torchvision和torchtext。

之前使用 torchDataLoader類直接加載圖像并將其轉(zhuǎn)換為張量。現(xiàn)在結(jié)合torchvision和torchtext介紹torch中的內(nèi)置數(shù)據(jù)集

Torchvision 中的數(shù)據(jù)集

MNIST

MNIST 是一個(gè)由標(biāo)準(zhǔn)化和中心裁剪的手寫圖像組成的數(shù)據(jù)集。它有超過 60,000 張訓(xùn)練圖像和 10,000 張測(cè)試圖像。這是用于學(xué)習(xí)和實(shí)驗(yàn)?zāi)康淖畛S玫臄?shù)據(jù)集之一。要加載和使用數(shù)據(jù)集,使用以下語法導(dǎo)入:torchvision.datasets.MNIST()。

Fashion MNIST

Fashion MNIST數(shù)據(jù)集類似于MNIST,但該數(shù)據(jù)集包含T恤、褲子、包包等服裝項(xiàng)目,而不是手寫數(shù)字,訓(xùn)練和測(cè)試樣本數(shù)分別為60,000和10,000。要加載和使用數(shù)據(jù)集,使用以下語法導(dǎo)入:torchvision.datasets.FashionMNIST()

CIFAR

CIFAR數(shù)據(jù)集有兩個(gè)版本,CIFAR10和CIFAR100。CIFAR10 由 10 個(gè)不同標(biāo)簽的圖像組成,而 CIFAR100 有 100 個(gè)不同的類。這些包括常見的圖像,如卡車、青蛙、船、汽車、鹿等。

torchvision.datasets.CIFAR10() torchvision.datasets.CIFAR100()

COCO

COCO數(shù)據(jù)集包含超過 100,000 個(gè)日常對(duì)象,如人、瓶子、文具、書籍等。這個(gè)圖像數(shù)據(jù)集廣泛用于對(duì)象檢測(cè)和圖像字幕應(yīng)用。下面是可以加載 COCO 的位置??:torchvision.datasets.CocoCaptions()

EMNIST

EMNIST數(shù)據(jù)集是 MNIST 數(shù)據(jù)集的高級(jí)版本。它由包括數(shù)字和字母的圖像組成。如果您正在處理基于從圖像中識(shí)別文本的問題,EMNIST是一個(gè)不錯(cuò)的選擇。下面是可以加載 EMNIST的位置??::torchvision.datasets.EMNIST()

IMAGE-NET

ImageNet 是用于訓(xùn)練高端神經(jīng)網(wǎng)絡(luò)的旗艦數(shù)據(jù)集之一。它由分布在 10,000 個(gè)類別中的超過 120 萬張圖像組成。通常,這個(gè)數(shù)據(jù)集加載在高端硬件系統(tǒng)上,因?yàn)閱为?dú)的 CPU 無法處理這么大的數(shù)據(jù)集。下面是加載 ImageNet 數(shù)據(jù)集的類:torchvision.datasets.ImageNet()

Torchtext 中的數(shù)據(jù)集

IMDB

IMDB是一個(gè)用于情感分類的數(shù)據(jù)集,其中包含一組 25,000 條高度極端的電影評(píng)論用于訓(xùn)練,另外 25,000 條用于測(cè)試。使用以下類加載這些數(shù)據(jù)torchtext:torchtext.datasets.IMDB()

WikiText2

WikiText2語言建模數(shù)據(jù)集是一個(gè)超過 1 億個(gè)標(biāo)記的集合。它是從維基百科中提取的,并保留了標(biāo)點(diǎn)符號(hào)和實(shí)際的字母大小寫。它廣泛用于涉及長(zhǎng)期依賴的應(yīng)用程序。可以從torchtext以下位置加載此數(shù)據(jù):torchtext.datasets.WikiText2()

除了上述兩個(gè)流行的數(shù)據(jù)集,torchtext庫中還有更多可用的數(shù)據(jù)集,例如 SST、TREC、SNLI、MultiNLI、WikiText-2、WikiText103、PennTreebank、Multi30k 等。

深入查看 MNIST 數(shù)據(jù)集

MNIST 是最受歡迎的數(shù)據(jù)集之一。現(xiàn)在我們將看到 PyTorch 如何從 pytorch/vision 存儲(chǔ)庫加載 MNIST 數(shù)據(jù)集。讓我們首先下載數(shù)據(jù)集并將其加載到名為 的變量中data_train

from torchvision.datasets import MNIST# Download MNIST data_train = MNIST('~/mnist_data', train=True, download=True)import matplotlib.pyplot as pltrandom_image = data_train[0][0] random_image_label = data_train[0][1]# Print the Image using Matplotlib plt.imshow(random_image) print("The label of the image is:", random_image_label)

DataLoader加載MNIST

下面我們使用DataLoader該類加載數(shù)據(jù)集,如下所示。

import torch from torchvision import transformsdata_train = torch.utils.data.DataLoader(MNIST('~/mnist_data', train=True, download=True, transform = transforms.Compose([transforms.ToTensor()])),batch_size=64,shuffle=True)for batch_idx, samples in enumerate(data_train):print(batch_idx, samples)

CUDA加載

我們可以啟用 GPU 來更快地訓(xùn)練我們的模型。現(xiàn)在讓我們使用CUDA加載數(shù)據(jù)時(shí)可以使用的(GPU 支持 PyTorch)的配置。

device = "cuda" if torch.cuda.is_available() else "cpu" kwargs = {'num_workers': 1, 'pin_memory': True} if device=='cuda' else {}train_loader = torch.utils.data.DataLoader(torchvision.datasets.MNIST('/files/', train=True, download=True),batch_size=batch_size_train, **kwargs)test_loader = torch.utils.data.DataLoader(torchvision.datasets.MNIST('files/', train=False, download=True),batch_size=batch_size, **kwargs)

ImageFolder

ImageFolder是一個(gè)通用數(shù)據(jù)加載器類torchvision,可幫助加載自己的圖像數(shù)據(jù)集。處理一個(gè)分類問題并構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò)來識(shí)別給定的圖像是apple還是orange。要在 PyTorch 中執(zhí)行此操作,第一步是在默認(rèn)文件夾結(jié)構(gòu)中排列圖像,如下所示:

root ├── orange │ ├── orange_image1.png │ └── orange_image1.png ├── apple │ └── apple_image1.png │ └── apple_image2.png │ └── apple_image3.png

可以使用ImageLoader該類加載所有這些圖像。

torchvision.datasets.ImageFolder(root, transform)

transforms

PyTorch 轉(zhuǎn)換定義了簡(jiǎn)單的圖像轉(zhuǎn)換技術(shù),可將整個(gè)數(shù)據(jù)集轉(zhuǎn)換為獨(dú)特的格式。

如果是一個(gè)包含不同分辨率的不同汽車圖片的數(shù)據(jù)集,在訓(xùn)練時(shí),我們訓(xùn)練數(shù)據(jù)集中的所有圖像都應(yīng)該具有相同的分辨率大小。如果我們手動(dòng)將所有圖像轉(zhuǎn)換為所需的輸入大小,則很耗時(shí),因此我們可以使用transforms;使用幾行 PyTorch 代碼,我們數(shù)據(jù)集中的所有圖像都可以轉(zhuǎn)換為所需的輸入大小和分辨率。

現(xiàn)在讓我們加載 CIFAR10torchvision.datasets并應(yīng)用以下轉(zhuǎn)換:

  • 將所有圖像調(diào)整為 32×32
  • 對(duì)圖像應(yīng)用中心裁剪變換
  • 將裁剪后的圖像轉(zhuǎn)換為張量
  • 標(biāo)準(zhǔn)化圖像
import torch import torchvision import torchvision.transforms as transforms import matplotlib.pyplot as plt import numpy as nptransform = transforms.Compose([# resize 32×32transforms.Resize(32),# center-crop裁剪變換transforms.CenterCrop(32),# to-tensortransforms.ToTensor(),# normalize 標(biāo)準(zhǔn)化transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]) ])trainset = torchvision.datasets.CIFAR10(root='./data', train=True,download=True, transform=transform) trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,shuffle=False)

在 PyTorch 中創(chuàng)建自定義數(shù)據(jù)集

下面將創(chuàng)建一個(gè)由數(shù)字和文本組成的簡(jiǎn)單自定義數(shù)據(jù)集。需要封裝Dataset 類中的__getitem__()和__len__()方法。

  • __getitem__()方法通過索引返回?cái)?shù)據(jù)集中的選定樣本。
  • __len__()方法返回?cái)?shù)據(jù)集的總大小。

下面是曾經(jīng)封裝FruitImagesDataset數(shù)據(jù)集的代碼,基本是比較好的 PyTorch 中創(chuàng)建自定義數(shù)據(jù)集的模板。

import os import numpy as np import cv2 import torch import matplotlib.patches as patches import albumentations as A from albumentations.pytorch.transforms import ToTensorV2 from matplotlib import pyplot as plt from torch.utils.data import Dataset from xml.etree import ElementTree as et from torchvision import transforms as torchtransclass FruitImagesDataset(torch.utils.data.Dataset):def __init__(self, files_dir, width, height, transforms=None):self.transforms = transformsself.files_dir = files_dirself.height = heightself.width = widthself.imgs = [image for image in sorted(os.listdir(files_dir))if image[-4:] == '.jpg']self.classes = ['_','apple', 'banana', 'orange']def __getitem__(self, idx):img_name = self.imgs[idx]image_path = os.path.join(self.files_dir, img_name)# reading the images and converting them to correct size and colorimg = cv2.imread(image_path)img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB).astype(np.float32)img_res = cv2.resize(img_rgb, (self.width, self.height), cv2.INTER_AREA)# diving by 255img_res /= 255.0# annotation fileannot_filename = img_name[:-4] + '.xml'annot_file_path = os.path.join(self.files_dir, annot_filename)boxes = []labels = []tree = et.parse(annot_file_path)root = tree.getroot()# cv2 image gives size as height x widthwt = img.shape[1]ht = img.shape[0]# box coordinates for xml files are extracted and corrected for image size givenfor member in root.findall('object'):labels.append(self.classes.index(member.find('name').text))# bounding boxxmin = int(member.find('bndbox').find('xmin').text)xmax = int(member.find('bndbox').find('xmax').text)ymin = int(member.find('bndbox').find('ymin').text)ymax = int(member.find('bndbox').find('ymax').text)xmin_corr = (xmin / wt) * self.widthxmax_corr = (xmax / wt) * self.widthymin_corr = (ymin / ht) * self.heightymax_corr = (ymax / ht) * self.heightboxes.append([xmin_corr, ymin_corr, xmax_corr, ymax_corr])# convert boxes into a torch.Tensorboxes = torch.as_tensor(boxes, dtype=torch.float32)# getting the areas of the boxesarea = (boxes[:, 3] - boxes[:, 1]) * (boxes[:, 2] - boxes[:, 0])# suppose all instances are not crowdiscrowd = torch.zeros((boxes.shape[0],), dtype=torch.int64)labels = torch.as_tensor(labels, dtype=torch.int64)target = {}target["boxes"] = boxestarget["labels"] = labelstarget["area"] = areatarget["iscrowd"] = iscrowd# image_idimage_id = torch.tensor([idx])target["image_id"] = image_idif self.transforms:sample = self.transforms(image=img_res,bboxes=target['boxes'],labels=labels)img_res = sample['image']target['boxes'] = torch.Tensor(sample['bboxes'])return img_res, targetdef __len__(self):return len(self.imgs)def get_transform(train):if train:return A.Compose([A.HorizontalFlip(0.5),ToTensorV2(p=1.0)], bbox_params={'format': 'pascal_voc', 'label_fields': ['labels']})else:return A.Compose([ToTensorV2(p=1.0)], bbox_params={'format': 'pascal_voc', 'label_fields': ['labels']})files_dir = '../input/fruit-images-for-object-detection/train_zip/train' test_dir = '../input/fruit-images-for-object-detection/test_zip/test'dataset = FruitImagesDataset(train_dir, 480, 480)

總結(jié)

以上是生活随笔為你收集整理的【小白学习PyTorch教程】十七、 PyTorch 中 数据集torchvision和torchtext的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天看天天色 | 中文字幕在线视频免费播放 | 成人免费片 | 国产精品无码在线播放 | 无码人妻精品一区二区三应用大全 | 国产精品成人久久电影 | 国产69av| av导航在线 | 日韩avv| 天堂中文在线8 | 91美女在线 | 99久久婷婷国产综合精品草原 | 国产女主播福利 | 污片在线看 | 少妇激情偷人三级 | 黄色伊人网 | 一区二区成人网 | 91自啪| 日韩欧美不卡视频 | 99国产精品一区二区 | 日日夜夜精品免费视频 | 九九色播| 折磨小男生性器羞耻的故事 | 日本中文视频 | 免费黄色成人 | 无码人妻丰满熟妇区毛片18 | 99re国产精品 | 黑人与日本少妇高潮 | 91久久综合亚洲鲁鲁五月天 | 免费看黄色一级大片 | 17c精品麻豆一区二区免费 | 中文av网| 亚洲激情av在线 | 夜夜骑天天干 | 亚洲free性xxxx护士hd | 看黄网站在线观看 | 国产无毛片 | 凹凸日日摸日日碰夜夜 | 性少妇xxxxx| 国产精品青青草 | 性一交一乱一精一晶 | 午夜国产在线观看 | 风流老熟女一区二区三区 | missav在线 | 女教师三上悠亚ssni-152 | 国产精品suv一区二区 | 亚洲看片网站 | 日韩毛片大全 | 成人18在线| 香港三级韩国三级日本三级 | 国产寡妇亲子伦一区二区三区四区 | 国产日产精品一区二区三区 | 清纯唯美亚洲 | 第四色成人网 | 日韩脚交footjobhd| 激情的网站 | 亚洲成人精品在线播放 | 欧美久久久久久又粗又大 | 日韩女优一区二区 | 国产精品久久久久久免费 | 91精品啪在线观看国产 | 69xxx免费视频 | www.免费av | 麻豆国产在线视频 | 日韩精品在线观看一区二区三区 | 天堂网2018| 中文字幕一区二区三区乱码人妻 | 亚色91 | 成人乱人乱一区二区三区一级视频 | 熟女少妇在线视频播放 | 狠狠干一区 | 婷婷在线视频观看 | 视频一区二区在线播放 | 4438x全国最大成人网 | 黄色污污网站 | 桃花久久 | 性xxx18 | 亚洲人丰满奶水 | 涩色视频 | 黑人一区二区三区四区五区 | 精品国产乱码久久久久久蜜柚 | 国产偷亚洲偷欧美偷精品 | 精品无码在线观看 | 91丝袜一区在线观看 | 国产精品一区二区三区不卡 | 艹男人的日日夜夜 | 壮汉被书生c到合不拢腿 | 午夜精品久久久久久久久久久久 | 免费激情 | 国产91av视频 | wwwxxxx欧美 | 亚洲女人18毛片水真多 | 国产在线毛片 | 日韩成人自拍 | 亚洲色图国产精品 | 麻豆成人免费视频 | 视频久久 | 亚洲网站色 | 波多野结衣国产在线 |