Pytorch學習 一) 定義自己的資料集

2021-10-07 09:30:12 字數 1929 閱讀 3149

torch.utils.data.dataset 是資料集的抽象類,當我們定義自己的資料集都要繼承這個方法,並且必須覆蓋它的__len__和__getitem__這個兩個方法,__len__提高了資料集的大小,__getitem__用來索引資料集中每個樣本,

import torch.utils.data

import os

from

ptlimport image

from torchvision import transforms

# 影象預處理

#########

data_tansforms=transforms.

compose([

transforms.

totensor()

, transforms.

resize((

256,

128)

,interpolation=3)

])# 自定義乙個資料集類

#######

class

kesci_set

(data.dataset)

://建構函式

def__init__

(self,root,transforms=none)

://影象路徑前面根目錄下所有影象名稱list

imgs=os.

listdir

(root)

//imgs=影象根目錄+影象名(每張影象絕對路徑list)

self.imgs=

[os.path.

join

(root,k)

for k in imgs]

//影象預處理包括(張量化,尺寸固定,旋轉,隨機裁剪)

self.transforms=transforms

def__getitem__

(self,index)

: img_path=self.imgs[index]

pil_img=image.

open

(img_path)

if self.transforms:

data=self.

transforms

(pil_img)

else

://影象先變成python的array陣列

pil_img=np.

asarray

(pil_img)

//然後將python array陣列轉換為torch的張量

data=torch.

from_numpy

(pil_img)

def __len__

(self)

:return

len(self.imgs)

#定義乙個載入器

######

root=

"d:/imgdata"

image_datasets=

kesci_set

(root,data_transforms)

dataloaders=data.

dataloader

(image_datasets,batch_size=

16,num_workers=

0,shuffle=false)

#使用#############

for data in dataloaders:

img=data

n,c,h,w=img.

size()

....

.

注意二點:

1、處理影象時,必須要把讀取的影象轉化我pytorch tensor張量形式。所以如果你新增了transforms的話一定要有transforms.totensor()這一句。

2、如果是用windows系統跑,設num_worker=0,windows多執行緒讀取資料可能會異常報錯。

Nodejs 入門學習 (一) 定義變數

宣告與未聲名變數的區別 g a var name d name nodejs b name nodejs var name c functionx x console.log y 1 console.log z referenceerror z is not defined d console.lo...

深度學習pytorch之一步匯入自己的訓練集

第一種 使用torchvision工具包中的datasets.imagefolder 該方法較為簡單 第二種 使用torch.utils.data.dataset,自定義匯入資料的方式 需要根據不同情況編寫 第一種 torchvision.datasets.imagefolder 要求 專門對於分類...

多執行緒(一) 定義,使用

1.程式 程序和執行緒 程式是乙個靜態概念 程序是 程式 的乙個執行例項 執行緒是一種輕量級程序,大多是情況下用於執行非同步操作。執行緒是cpu排程的基本單位 相互關係 android程式開始啟動時,會單獨啟動乙個程序,同時產生乙個uithread main執行緒 乙個程式預設情況下只有乙個proc...