成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

PyTorch中的數據集Torchvision和Torchtext

人工智能 深度學習
對于PyTorch加載和處理不同類型數據,官方提供了torchvision和torchtext。之前使用 torchDataLoader類直接加載圖像并將其轉換為張量。現在結合torchvision和torchtext介紹torch中的內置數據集。

[[421061]]

對于PyTorch加載和處理不同類型數據,官方提供了torchvision和torchtext。

之前使用 torchDataLoader類直接加載圖像并將其轉換為張量。現在結合torchvision和torchtext介紹torch中的內置數據集

Torchvision 中的數據集

MNIST

MNIST是一個由標準化和中心裁剪的手寫圖像組成的數據集。它有超過 60,000 張訓練圖像和 10,000 張測試圖像。這是用于學習和實驗目的最常用的數據集之一。要加載和使用數據集,使用以下語法導入:torchvision.datasets.MNIST()。

Fashion MNIST

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

CIFAR

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

  1. torchvision.datasets.CIFAR10() 
  2. torchvision.datasets.CIFAR100() 

COCO

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

EMNIST

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

IMAGE-NET

ImageNet 是用于訓練高端神經網絡的旗艦數據集之一。它由分布在 10,000 個類別中的超過 120 萬張圖像組成。通常,這個數據集加載在高端硬件系統上,因為單獨的 CPU 無法處理這么大的數據集。下面是加載 ImageNet 數據集的類:torchvision.datasets.ImageNet()

Torchtext 中的數據集

IMDB

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

WikiText2

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

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

深入查看 MNIST 數據集

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

  1. from torchvision.datasets import MNIST 
  2.  
  3. # Download MNIST  
  4. data_train = MNIST('~/mnist_data', train=True, download=True
  5.  
  6. import matplotlib.pyplot as plt 
  7.  
  8. random_image = data_train[0][0] 
  9. random_image_label = data_train[0][1] 
  10.  
  11. # Print the Image using Matplotlib 
  12. plt.imshow(random_image) 
  13. print("The label of the image is:", random_image_label) 

DataLoader加載MNIST

下面我們使用DataLoader該類加載數據集,如下所示。

  1. import torch 
  2. from torchvision import transforms 
  3.  
  4. data_train = torch.utils.data.DataLoader( 
  5.     MNIST( 
  6.           '~/mnist_data', train=True, download=True,  
  7.           transform = transforms.Compose([ 
  8.               transforms.ToTensor() 
  9.           ])), 
  10.           batch_size=64, 
  11.           shuffle=True 
  12.           ) 
  13.  
  14. for batch_idx, samples in enumerate(data_train): 
  15.       print(batch_idx, samples) 

CUDA加載

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

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

ImageFolder

ImageFolder是一個通用數據加載器類torchvision,可幫助加載自己的圖像數據集。處理一個分類問題并構建一個神經網絡來識別給定的圖像是apple還是orange。要在 PyTorch 中執行此操作,第一步是在默認文件夾結構中排列圖像,如下所示:

  1. root 
  2. ├── orange 
  3. │   ├── orange_image1.png 
  4. │   └── orange_image1.png 
  5. ├── apple 
  6. │   └── apple_image1.png 
  7. │   └── apple_image2.png 
  8. │   └── apple_image3.png 

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

  1. torchvision.datasets.ImageFolder(root, transform) 

transforms

PyTorch 轉換定義了簡單的圖像轉換技術,可將整個數據集轉換為獨特的格式。

如果是一個包含不同分辨率的不同汽車圖片的數據集,在訓練時,我們訓練數據集中的所有圖像都應該具有相同的分辨率大小。如果我們手動將所有圖像轉換為所需的輸入大小,則很耗時,因此我們可以使用transforms;使用幾行 PyTorch 代碼,我們數據集中的所有圖像都可以轉換為所需的輸入大小和分辨率。

現在讓我們加載 CIFAR10torchvision.datasets并應用以下轉換:

  • 將所有圖像調整為 32×32
  • 對圖像應用中心裁剪變換
  • 將裁剪后的圖像轉換為張量
  • 標準化圖像
  1. import torch 
  2. import torchvision 
  3. import torchvision.transforms as transforms 
  4. import matplotlib.pyplot as plt 
  5. import numpy as np 
  6.  
  7. transform = transforms.Compose([ 
  8.     # resize 32×32 
  9.     transforms.Resize(32), 
  10.     # center-crop裁剪變換 
  11.     transforms.CenterCrop(32), 
  12.     # to-tensor 
  13.     transforms.ToTensor(), 
  14.     # normalize 標準化 
  15.     transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]) 
  16. ]) 
  17.  
  18. trainset = torchvision.datasets.CIFAR10(root='./data', train=True
  19.                                         download=True, transform=transform) 
  20. trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, 
  21.                                           shuffle=False

在 PyTorch 中創建自定義數據集

下面將創建一個由數字和文本組成的簡單自定義數據集。需要封裝Dataset 類中的__getitem__()和__len__()方法。

  • __getitem__()方法通過索引返回數據集中的選定樣本。
  • __len__()方法返回數據集的總大小。

下面是曾經封裝FruitImagesDataset數據集的代碼,基本是比較好的 PyTorch 中創建自定義數據集的模板。

  1. import os 
  2. import numpy as np 
  3. import cv2 
  4. import torch 
  5. import matplotlib.patches as patches 
  6. import albumentations as A 
  7. from albumentations.pytorch.transforms import ToTensorV2 
  8. from matplotlib import pyplot as plt 
  9. from torch.utils.data import Dataset 
  10. from xml.etree import ElementTree as et 
  11. from torchvision import transforms as torchtrans 
  12.  
  13. class FruitImagesDataset(torch.utils.data.Dataset): 
  14.     def __init__(self, files_dir, width, height, transforms=None): 
  15.         self.transforms = transforms 
  16.         self.files_dir = files_dir 
  17.         self.height = height 
  18.         self.width = width 
  19.  
  20.  
  21.         self.imgs = [image for image in sorted(os.listdir(files_dir)) 
  22.                      if image[-4:] == '.jpg'
  23.  
  24.         self.classes = ['_','apple''banana''orange'
  25.  
  26.     def __getitem__(self, idx): 
  27.  
  28.         img_name = self.imgs[idx] 
  29.         image_path = os.path.join(self.files_dir, img_name) 
  30.  
  31.         # reading the images and converting them to correct size and color 
  32.         img = cv2.imread(image_path) 
  33.         img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB).astype(np.float32) 
  34.         img_res = cv2.resize(img_rgb, (self.width, self.height), cv2.INTER_AREA) 
  35.         # diving by 255 
  36.         img_res /= 255.0 
  37.  
  38.         # annotation file 
  39.         annot_filename = img_name[:-4] + '.xml' 
  40.         annot_file_path = os.path.join(self.files_dir, annot_filename) 
  41.  
  42.         boxes = [] 
  43.         labels = [] 
  44.         tree = et.parse(annot_file_path) 
  45.         root = tree.getroot() 
  46.  
  47.         # cv2 image gives size as height x width 
  48.         wt = img.shape[1] 
  49.         ht = img.shape[0] 
  50.  
  51.         # box coordinates for xml files are extracted and corrected for image size given 
  52.         for member in root.findall('object'): 
  53.             labels.append(self.classes.index(member.find('name').text)) 
  54.  
  55.             # bounding box 
  56.             xmin = int(member.find('bndbox').find('xmin').text) 
  57.             xmax = int(member.find('bndbox').find('xmax').text) 
  58.  
  59.             ymin = int(member.find('bndbox').find('ymin').text) 
  60.             ymax = int(member.find('bndbox').find('ymax').text) 
  61.  
  62.             xmin_corr = (xmin / wt) * self.width 
  63.             xmax_corr = (xmax / wt) * self.width 
  64.             ymin_corr = (ymin / ht) * self.height 
  65.             ymax_corr = (ymax / ht) * self.height 
  66.  
  67.             boxes.append([xmin_corr, ymin_corr, xmax_corr, ymax_corr]) 
  68.  
  69.         # convert boxes into a torch.Tensor 
  70.         boxes = torch.as_tensor(boxes, dtype=torch.float32) 
  71.  
  72.         # getting the areas of the boxes 
  73.         area = (boxes[:, 3] - boxes[:, 1]) * (boxes[:, 2] - boxes[:, 0]) 
  74.  
  75.         # suppose all instances are not crowd 
  76.         iscrowd = torch.zeros((boxes.shape[0],), dtype=torch.int64) 
  77.  
  78.         labels = torch.as_tensor(labels, dtype=torch.int64) 
  79.  
  80.         target = {} 
  81.         target["boxes"] = boxes 
  82.         target["labels"] = labels 
  83.         target["area"] = area 
  84.         target["iscrowd"] = iscrowd 
  85.         # image_id 
  86.         image_id = torch.tensor([idx]) 
  87.         target["image_id"] = image_id 
  88.  
  89.         if self.transforms: 
  90.             sample = self.transforms(image=img_res, 
  91.                                      bboxes=target['boxes'], 
  92.                                      labels=labels) 
  93.  
  94.             img_res = sample['image'
  95.             target['boxes'] = torch.Tensor(sample['bboxes']) 
  96.         return img_res, target 
  97.     def __len__(self): 
  98.         return len(self.imgs) 
  99.  
  100. def get_transform(train): 
  101.     if train: 
  102.         return A.Compose([ 
  103.             A.HorizontalFlip(0.5), 
  104.             ToTensorV2(p=1.0) 
  105.         ], bbox_params={'format''pascal_voc''label_fields': ['labels']}) 
  106.     else
  107.         return A.Compose([ 
  108.             ToTensorV2(p=1.0) 
  109.         ], bbox_params={'format''pascal_voc''label_fields': ['labels']}) 
  110.  
  111. files_dir = '../input/fruit-images-for-object-detection/train_zip/train' 
  112. test_dir = '../input/fruit-images-for-object-detection/test_zip/test' 
  113.  
  114. dataset = FruitImagesDataset(train_dir, 480, 480) 

 

責任編輯:姜華 來源: Python之王
相關推薦

2023-04-07 07:29:54

Torchvisio計算機視覺

2023-12-18 10:41:28

深度學習NumPyPyTorch

2021-12-13 09:14:06

清單管理數據集

2019-06-19 09:13:29

機器學習中數據集深度學習

2021-09-10 10:26:45

PyTorch數據集S3 Plugin

2010-04-27 13:21:58

Oracle數據字符集

2023-12-01 16:23:52

大數據人工智能

2020-07-15 13:51:48

TensorFlow數據機器學習

2023-07-28 09:54:14

SQL數據Excel

2021-09-03 06:46:34

SQL分組集功能

2021-11-09 08:48:48

Python開源項目

2020-06-24 07:53:03

機器學習技術人工智能

2020-04-29 13:40:32

數據集數據科學冠狀病毒

2020-10-27 09:37:43

PyTorchTensorFlow機器學習

2009-08-03 14:39:25

Asp.Net函數集

2020-10-05 21:57:17

GitHub 開源開發

2022-09-16 00:11:45

PyTorch神經網絡存儲

2010-06-17 09:29:32

SQLServer 2

2012-06-07 09:21:55

ibmdw

2021-01-14 21:40:40

機器學習計算機視覺圖像數據集
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜a√| 日韩av在线一区二区 | 国产二区精品视频 | 99成人| 日本人和亚洲人zjzjhd | 色吊丝2| 久久精品视频9 | 中文字幕精品视频 | 中文二区 | 亚洲免费片 | 日韩免费成人av | 久久久久久综合 | 成人免费观看男女羞羞视频 | 国产日韩精品久久 | 黄色av网站在线观看 | 欧美成人精品在线 | 欧美日韩一区二区在线 | 午夜网站视频 | 精品国产精品国产偷麻豆 | 欧美日韩精品久久久免费观看 | 一区二区三区在线看 | 国产精品国产a | 亚洲看片网站 | 亚洲综合久久精品 | 国产成人免费网站 | 欧美九九九 | 激情五月婷婷在线 | 久久青视频 | 精品国产乱码久久久久久闺蜜 | 国产高清视频一区 | 日韩欧美在线观看 | 范冰冰一级做a爰片久久毛片 | 91精品国产综合久久福利软件 | 欧美色图综合网 | 伊人99 | 国产欧美精品一区二区 | 欧美成年人网站 | 国产精品99久久久久久宅男 | 欧美h视频| 亚洲精品久久久久avwww潮水 | 精品啪啪 |