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

2021-10-02 15:42:20 字數 3454 閱讀 4930

第一種:使用torchvision工具包中的datasets.imagefolder(該方法較為簡單)

第二種:使用torch.utils.data.dataset,自定義匯入資料的方式(需要根據不同情況編寫**)

第一種:torchvision.datasets.imagefolder

要求:專門對於分類問題,將不同標籤的分別放在不同的資料夾下,如圖(將貓狗的分別放在兩個不同的資料夾下),cat和dog資料夾放在data資料夾下。

dataset = torchvision.datasets.imagefolder('path')  # path:data資料夾的路徑
第二種:自定義讀取方式

需要自定義乙個dataset

from pil import image

from torch.utils.data import dataset,dataloader

class mydataset(dataset):

def __init__(self, data_dir, transform=none):

self.imgs = self.get_imgs(data_dir)

self.transform = transform

def __getitem__(self, index):

img_path, label = self.imgs[index]

img = image.open(img_path)

if self.transform is not none:

img = self.transform(img)

return img, label

def __len__(self):

return len(self.imgs)

def get_images(data_dir):

imgs =

for root, dirs, _ in os.walk(data_dir): # dirs 為各類名

for sub_dirs in dirs:

img_names = os.listdir(os.path.join(root, sub_dir)) # 路徑

for i in range(len(img_names)):

img_name = img_names[i] # 名

path_img = os.path.join(root, sub_dir, img_name)

trainset = mydataset(train_dir,transforms)

trainloader = dataloader(trainset, batch_size=1)

整個**分三步:需要自己先定義乙個類,繼承torch.utils.data.dataset,並初始化引數:主要為設定的路徑和預處理方法

class mydataset(dataset):

def __init__(self, data_dir, transform=none):

self.imgs = self.get_imgs(data_dir)

self.transform = transform

自定義讀取檔案的路徑

建立乙個空的list,將輸入的路徑和輸出的路徑以tuple的形式逐個存入。

在本例中,以輸入1,標籤1,輸入2,標籤2,…的形式儲存的。

def get_images(data_dir):

imgs = # 建立乙個空的list

for root, dirs, _ in os.walk(data_dir): # 得到data_dir資料夾下所有的檔名(得到的dirs 為各類名)

for sub_dirs in dirs:

img_names = os.listdir(os.path.join(root, sub_dir)) # 獲得資料夾下所有路徑

for i in range(len(img_names)//2):

img_input_name = img_names[i] # 提取乙個input名

img_label_name = img_name[i+1] # 提取乙個label名

path_img_1 = os.path.join(root, sub_dir, img_name) # 獲得路徑

path_img_2 = os.path.join(root, sub_dir, img_name) # 獲得路徑

3.定義getitem,逐個讀入

getitem為父類torch.utils.data.dataset已經定義好的,它會逐個進行index=0,1,2,…。

只需要開啟,進行預處理後,return即可。

定義len,返回樣本數。

def __getitem__(self, index):

img_path, label = self.imgs[index]

img = image.open(img_path) # 開啟

if self.transform is not none:

img = self.transform(img) # 預處理

return img, label

def __len__(self):

return len(self.imgs)

補充知識點:

dataloader

torch.utils.data.dataloader:構建可迭代的資料裝載器

dataloader(dataset, batch_size=1, shuffle=false, num_works=0)
dataset:dataset類,決定資料從哪兒讀取及如何讀取

batch_size:批大小

shuffle:每個epoch是否亂序

num_works:是否多程序讀取資料

dataset

torch.utils.data.dataset:所有自定義的dataset需要繼承它,並且複寫

class dataset(object):

def __init__(self):

pass

def __getitem__(self, index):

pass

def __len__(self, other):

pass

len:返回資料集的大小

getitem:接受乙個樣本,返回乙個索引

一步一步學習IdentityServer3 8

identityserver3結合hangfire及cookies中介軟體實現授權 idr3資料庫token過期管理 globalconfiguration.configuration.usesqlserverstorage hangfire globalconfiguration.configur...

一步一步學習IdentityServer3 4

其實上述例子 很多都很找到 但是在實際生態環境中給例子有很多不一樣的地方 比如自定已登入介面怎麼做?怎麼訪問自己的使用者資料庫實現登入?怎麼在介面中使用,在介面中又怎麼實現與idr3結合授權?等等問題 解下來我會在實際專案中整體一步一步介紹 1 這是我自定義登入的介面 2 在授權同意頁面 3 下圖是...

一步一步學習IdentityServer3 3

證書 static class certificate private static byte readstream stream input return ms.toarray clients public class clients allowedcorsorigins new list,all...