第一種:使用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...