Pytorch 自定義資料集

2021-10-04 10:07:04 字數 4541 閱讀 9558

pytorch將資料集的處理過程標準化

繼承dataset類

pytorch中提供了torch.utils.data.dataset抽象類,使用時需要繼承這個類,並重寫__len__和__geiitem__函式。

增加資料變換

pytorch提供了torchvision.transforms可以比較方便進行影象的縮放、裁剪、隨機旋轉、填充及張量的歸一化操作等,操作物件是pil的image或者tensor。可以使用transforms.compose將多個變換整合。使用的時候一般整合到dataset的繼承類中。

繼承dataloader

需要進行批量處理、隨機選取等等,所以還需要這一步。

import argparse

import os

import glob

import csv

import pil

import visdom

import matplotlib.pyplot as plt

import torch

import time

from torch.utils.data import dataset

from torchvision import transforms

class

mydata

(dataset)

:def

__init__

(self,root,transform=

none):

super

(mydata,self)

.__init__(

) self.root=root

self.transform=transform

self.name2label=

# 對映

#路徑->影象資料型別

input_image=pil.image.

open

(input_image)

.convert(

'rgb'

)if self.transform:

input_image=self.transform(input_image)

return input_image,input_label

defmain()

: parser = argparse.argumentparser(description=

'訓練引數'

) parser.add_argument(

'--batchsize'

,type

=int

, default=20,

help

='the number of batch_size'

) parser.add_argument(

'--epochs'

,type

=int

, default=20,

help

='the number of epochs'

) args = parser.parse_args(

) viz=visdom.visdom(

)#將乙個視窗類例項化

image_path = r'd:\projects\deeplearning\dataset\flower_photos\train'

tf=transforms.compose(

[ transforms.resize(

(224

,224))

, transforms.totensor()]

) sample=mydata(image_path,tf)

#sample=mydata(image_path,none)

#x,y=next(iter(sample))

#viz.image(x,win='sample_x',opts=dict(title='sample_x'))

train_loader=torch.utils.data.dataloader(sample,batch_size=args.batchsize,shuffle=

true

)#必須將大小提前調整為一樣才可以顯示

for x,y in train_loader:

viz.images(x,nrow=

5,win=

'batch'

,opts=

dict

(title=

'batch'))

viz.text(

str(y)

,win=

'label'

,opts=

dict

(title=

'haha'))

time.sleep(10)

if __name__ ==

'__main__'

: main(

)

python -m visdom.server
pytorch視覺化工具visdom啟動失敗解決方法

pytorch 自定義資料集載入方法

更多python教程請到 菜鳥教程 pytorch 官網給出的例子中都是使用了已經定義好的特殊資料集介面來載入資料,而且其使用的資料都是官方給出的資料。如果我們有自己收集的資料集,如何用來訓練網路呢?此時需要我們自己定義好資料處理介面。幸運的是pytroch給出了乙個資料集介面類 torch.uti...

Pytorch自定義引數

如果想要靈活地使用模型,可能需要自定義引數,比如 class net nn.module def init self super net,self init self.a torch.randn 2 3 requires grad true self.b nn.linear 2,2 defforwa...

PyTorch 自定義層

與使用module類構造模型類似。下面的centeredlayer類通過繼承module類自定義了乙個將輸入減掉均值後輸出的層,並將層的計算定義在了forward函式裡。這個層裡不含模型引數。class mydense nn.module def init self super mydense,se...