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