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...