最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PyTorch加載自己的數(shù)據(jù)集實(shí)例詳解

 更新時(shí)間:2020年03月18日 08:57:46   作者:飛谷云人工智能  
這篇文章主要介紹了PyTorch加載自己的數(shù)據(jù)集,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

數(shù)據(jù)預(yù)處理在解決深度學(xué)習(xí)問(wèn)題的過(guò)程中,往往需要花費(fèi)大量的時(shí)間和精力。 數(shù)據(jù)處理的質(zhì)量對(duì)訓(xùn)練神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō)十分重要,良好的數(shù)據(jù)處理不僅會(huì)加速模型訓(xùn)練, 更會(huì)提高模型性能。為解決這一問(wèn)題,PyTorch提供了幾個(gè)高效便捷的工具, 以便使用者進(jìn)行數(shù)據(jù)處理或增強(qiáng)等操作,同時(shí)可通過(guò)并行化加速數(shù)據(jù)加載。

數(shù)據(jù)集存放大致有以下兩種方式:

(1)所有數(shù)據(jù)集放在一個(gè)目錄下,文件名上附有標(biāo)簽名,數(shù)據(jù)集存放格式如下: root/cat_dog/cat.01.jpg

root/cat_dog/cat.02.jpg

........................

root/cat_dog/dog.01.jpg

root/cat_dog/dog.02.jpg

......................

(2)不同類(lèi)別的數(shù)據(jù)集放在不同目錄下,目錄名就是標(biāo)簽,數(shù)據(jù)集存放格式如下:

root/ants/xxx.png

root/ants/xxy.jpeg

root/ants/xxz.png

................

root/bees/123.jpg

root/bees/nsdf3.png

root/bees/asd932_.png

..................

1.1 對(duì)第1種數(shù)據(jù)集的處理步驟

(1)生成包含各文件名的列表(List)

(2)定義Dataset的一個(gè)子類(lèi),該子類(lèi)需要繼承Dataset類(lèi),查看Dataset類(lèi)的源碼

(3)重寫(xiě)父類(lèi)Dataset中的兩個(gè)魔法方法: 一個(gè)是: __lent__(self),其功能是len(Dataset),返回Dataset的樣本數(shù)。 另一個(gè)是__getitem__(self,index),其功能假設(shè)索引為i,使Dataset[i]返回第i個(gè)樣本。

(4)使用torch.utils.data.DataLoader加載數(shù)據(jù)集Dataset.

1.2 實(shí)例詳解

以下以cat-dog數(shù)據(jù)集為例,說(shuō)明如何實(shí)現(xiàn)自定義數(shù)據(jù)集的加載。

1.2.1 數(shù)據(jù)集結(jié)構(gòu)

所有數(shù)據(jù)集在cat-dog目錄下:

.\cat_dog\cat.01.jpg

.\cat_dog\cat.02.jpg

.\cat_dog\cat.03.jpg

....................

.\cat_dog\dog.01.jpg

.\cat_dog\dog.02.jpg

....................

1.2.2 導(dǎo)入需要用到的模塊

from torch.utils.data import DataLoader,Dataset
from skimage import io,transform
import matplotlib.pyplot as plt
import oimport torch
from torchvision import transforms, utils
from PIL import Image
import pandas as pd
import numpy as np
#過(guò)濾警告信息
import warnings
warnings.filterwarnings("ignore")

1.2.3定義加載自定義數(shù)據(jù)的類(lèi)

class MyDataset(Dataset): #繼承Dataset
 def __init__(self, path_dir, transform=None): #初始化一些屬性
  self.path_dir = path_dir #文件路徑,如'.\data\cat-dog'
  self.transform = transform #對(duì)圖形進(jìn)行處理,如標(biāo)準(zhǔn)化、截取、轉(zhuǎn)換等
  self.images = os.listdir(self.path_dir)#把路徑下的所有文件放在一個(gè)列表中
 
 def __len__(self):#返回整個(gè)數(shù)據(jù)集的大小
  return len(self.images)
 
 def __getitem__(self,index):#根據(jù)索引index返回圖像及標(biāo)簽
  image_index = self.images[index]#根據(jù)索引獲取圖像文件名稱(chēng)
  img_path = os.path.join(self.path_dir, image_index)#獲取圖像的路徑或目錄
  img = Image.open(img_path).convert('RGB')# 讀取圖像
    
  # 根據(jù)目錄名稱(chēng)獲取圖像標(biāo)簽(cat或dog)
  label = img_path.split('\\')[-1].split('.')[0]
  #把字符轉(zhuǎn)換為數(shù)字cat-0,dog-1
  label = 1 if 'dog' in label else 0
  
  if self.transform is not None:
   img = self.transform(img)
  return img,label

1.2.4 實(shí)例化類(lèi)

dataset = MyDataset('.\data\cat-dog',transform=None)
img, label = dataset[0] #將啟動(dòng)魔法方法__getitem__(0)
print(type(img))
<class 'PIL.Image.Image'>

1.2.5 查看圖像形狀

i=1
for img, label in dataset:
    if i
img的形狀(500, 374),label的值0

img的形狀(300, 280),label的值0

img的形狀(489, 499),label的值0

img的形狀(431, 410),label的值0

img的形狀(300, 224),label的值0

從上面返回樣本的形狀來(lái)看:

(1)每張圖片的大小不一樣,如果需要取batch訓(xùn)練的神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō)很不友好。

(2)返回樣本的數(shù)值較大,未歸一化至[-1, 1]

為此需要對(duì)img進(jìn)行轉(zhuǎn)換,如何轉(zhuǎn)換?只要使用torchvision中的transforms即可

1.2.6 對(duì)圖像數(shù)據(jù)進(jìn)行處理

這里使用torchvision中的transforms模塊

from torchvision import transforms as T
transform = T.Compose([
 T.Resize(224), # 縮放圖片(Image),保持長(zhǎng)寬比不變,最短邊為224像素
 T.CenterCrop(224), # 從圖片中間切出224*224的圖片
 T.ToTensor(), # 將圖片(Image)轉(zhuǎn)成Tensor,歸一化至[0, 1]
 T.Normalize(mean=[.5, .5, .5], std=[.5, .5, .5]) # 標(biāo)準(zhǔn)化至[-1, 1],規(guī)定均值和標(biāo)準(zhǔn)差
])

1.2.7查看處理后的數(shù)據(jù)

dataset = MyDataset('.\data\cat-dog',transform=transform)
for img, label in dataset: 
 print("圖像img的形狀{},標(biāo)簽label的值{}".format(img.shape, label))
 print("圖像數(shù)據(jù)預(yù)處理后:\n",img)
 break

圖像img的形狀torch.Size([3, 224, 224]),標(biāo)簽label的值0

圖像數(shù)據(jù)預(yù)處理后:

tensor([[[ 0.9059, 0.9137, 0.9137, ..., 0.9451, 0.9451, 0.9451],

[ 0.9059, 0.9137, 0.9137, ..., 0.9451, 0.9451, 0.9451],

[ 0.9059, 0.9137, 0.9137, ..., 0.9529, 0.9529, 0.9529],

...,

[-0.4824, -0.5294, -0.5373, ..., -0.9216, -0.9294, -0.9451],

[-0.4980, -0.5529, -0.5608, ..., -0.9294, -0.9373, -0.9529],

[-0.4980, -0.5529, -0.5686, ..., -0.9529, -0.9608, -0.9608]],

[[ 0.5686, 0.5765, 0.5765, ..., 0.7961, 0.7882, 0.7882],

[ 0.5686, 0.5765, 0.5765, ..., 0.7961, 0.7882, 0.7882],

[ 0.5686, 0.5765, 0.5765, ..., 0.8039, 0.7961, 0.7961],

...,

[-0.6078, -0.6471, -0.6549, ..., -0.9137, -0.9216, -0.9373],

[-0.6157, -0.6706, -0.6784, ..., -0.9216, -0.9294, -0.9451],

[-0.6157, -0.6706, -0.6863, ..., -0.9451, -0.9529, -0.9529]],

[[-0.0510, -0.0431, -0.0431, ..., 0.2078, 0.2157, 0.2157],

[-0.0510, -0.0431, -0.0431, ..., 0.2078, 0.2157, 0.2157],

[-0.0510, -0.0431, -0.0431, ..., 0.2157, 0.2235, 0.2235],

...,

[-0.9529, -0.9843, -0.9922, ..., -0.9529, -0.9608, -0.9765],

[-0.9686, -0.9922, -1.0000, ..., -0.9608, -0.9686, -0.9843],

[-0.9686, -0.9922, -1.0000, ..., -0.9843, -0.9922, -0.9922]]])

由此可知,數(shù)據(jù)已標(biāo)準(zhǔn)化、規(guī)范化。

1.2.8對(duì)數(shù)據(jù)集進(jìn)行批量加載

使用DataLoader模塊,對(duì)數(shù)據(jù)集dataset進(jìn)行批量加載

#使用DataLoader加載數(shù)據(jù)
dataloader = DataLoader(dataset,batch_size=4,shuffle=True)
for batch_datas, batch_labels in dataloader:
 print(batch_datas.size(),batch_labels.size())
torch.Size([4, 3, 224, 224]) torch.Size([4])
torch.Size([4, 3, 224, 224]) torch.Size([4])
torch.Size([4, 3, 224, 224]) torch.Size([4])
torch.Size([4, 3, 224, 224]) torch.Size([4])
torch.Size([4, 3, 224, 224]) torch.Size([4])
torch.Size([4, 3, 224, 224]) torch.Size([4])
torch.Size([4, 3, 224, 224]) torch.Size([4])
torch.Size([4, 3, 224, 224]) torch.Size([4])
torch.Size([4, 3, 224, 224]) torch.Size([4])
torch.Size([4, 3, 224, 224]) torch.Size([4])
torch.Size([2, 3, 224, 224]) torch.Size([2])

1.2.9隨機(jī)查看一個(gè)批次的圖像

import torchvision
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
# 顯示圖像
def imshow(img):
 img = img / 2 + 0.5  # unnormalize
 npimg = img.numpy()
 plt.imshow(np.transpose(npimg, (1, 2, 0)))
 plt.show()
# 隨機(jī)獲取部分訓(xùn)練數(shù)據(jù)
dataiter = iter(dataloader)
images, labels = dataiter.next()
# 顯示圖像
imshow(torchvision.utils.make_grid(images))
# 打印標(biāo)簽
print(' '.join('%s' % ["小狗" if labels[j].item()==1 else "小貓" for j in range(4)]))

2 對(duì)第2種數(shù)據(jù)集的處理

處理這種情況比較簡(jiǎn)單,可分為2步:

(1)使用datasets.ImageFolder讀取、處理圖像。

(2)使用.data.DataLoader批量加載數(shù)據(jù)集,示例如下:

import torch
from torchvision import transforms, datasets
data_transform = transforms.Compose([
  transforms.RandomSizedCrop(224),
  transforms.RandomHorizontalFlip(),
  transforms.ToTensor(),
  transforms.Normalize(mean=[0.485, 0.456, 0.406],
        std=[0.229, 0.224, 0.225])
 ])
hymenoptera_dataset = datasets.ImageFolder(root='.\catdog\train',
           transform=data_transform)
dataset_loader = torch.utils.data.DataLoader(hymenoptera_dataset, 

總結(jié)

到此這篇關(guān)于PyTorch加載自己的數(shù)據(jù)集實(shí)例詳解的文章就介紹到這了,更多相關(guān)PyTorch加載 數(shù)據(jù)集內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用python程序幫大家清理windows垃圾

    利用python程序幫大家清理windows垃圾

    Python 是一種面向?qū)ο?、解釋型?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,下面這篇文章主要給大家介紹了利用python程序如何實(shí)現(xiàn)清理垃圾的功能,本文只適用于windows,有需要的朋友可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-01-01
  • 運(yùn)用PyTorch動(dòng)手搭建一個(gè)共享單車(chē)預(yù)測(cè)器

    運(yùn)用PyTorch動(dòng)手搭建一個(gè)共享單車(chē)預(yù)測(cè)器

    這篇文章主要介紹了運(yùn)用PyTorch動(dòng)手搭建一個(gè)共享單車(chē)預(yù)測(cè)器,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python+Tkinter繪制一個(gè)數(shù)字時(shí)鐘

    Python+Tkinter繪制一個(gè)數(shù)字時(shí)鐘

    這篇文章主要為大家詳細(xì)介紹了Python使用Tkinter繪制一個(gè)數(shù)字時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • python導(dǎo)入庫(kù)的具體方法

    python導(dǎo)入庫(kù)的具體方法

    在本篇內(nèi)容里小編給大家分享的是關(guān)于python如何導(dǎo)入庫(kù)的步驟和方法,有需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • python實(shí)現(xiàn)文本去重且不打亂原本順序

    python實(shí)現(xiàn)文本去重且不打亂原本順序

    這篇文章主要介紹了python實(shí)現(xiàn)文本去重且不打亂原本順序,需要的朋友可以參考下
    2016-01-01
  • python簡(jiǎn)單的三元一次方程求解實(shí)例

    python簡(jiǎn)單的三元一次方程求解實(shí)例

    這篇文章主要介紹了python簡(jiǎn)單的三元一次方程求解實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • python 數(shù)據(jù)加密代碼

    python 數(shù)據(jù)加密代碼

    使用Python來(lái)做數(shù)據(jù)加密同樣簡(jiǎn)單,可以使用hashlib或者h(yuǎn)mac模塊來(lái)做數(shù)據(jù)加密
    2008-12-12
  • 詳解?python?logging日志模塊

    詳解?python?logging日志模塊

    這篇文章主要介紹了詳解?python?logging日志模塊,記錄日志最簡(jiǎn)單的方法就是在你想要記錄的地方加上一句?print?,?我相信無(wú)論是新手還是老鳥(niǎo)都經(jīng)常這么干。在簡(jiǎn)單的代碼中或者小型項(xiàng)目中這么干一點(diǎn)問(wèn)題都沒(méi)有,需要的朋友可以參考下
    2022-01-01
  • Python3.6.0+opencv3.3.0人臉檢測(cè)示例

    Python3.6.0+opencv3.3.0人臉檢測(cè)示例

    這篇文章主要為大家詳細(xì)介紹了Python3.6.0+opencv3.3.0人臉檢測(cè)示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Django一小時(shí)寫(xiě)出賬號(hào)密碼管理系統(tǒng)

    Django一小時(shí)寫(xiě)出賬號(hào)密碼管理系統(tǒng)

    這篇文章主要介紹了Django一小時(shí)寫(xiě)出賬號(hào)密碼管理系統(tǒng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評(píng)論

宝丰县| 绩溪县| 旬阳县| 耿马| 芮城县| 萨迦县| 沛县| 道真| 千阳县| 胶州市| 榆社县| 驻马店市| 沈丘县| 大埔区| 吉隆县| 梧州市| 蒲江县| 海口市| 双城市| 安丘市| 辽宁省| 通州区| 禄丰县| 菏泽市| 通辽市| 渭南市| 厦门市| 常熟市| 中超| 长乐市| 瑞昌市| 黔东| 宜宾县| 开原市| 革吉县| 涟水县| 玛纳斯县| 津市市| 天全县| 馆陶县| 眉山市|