定義自己的資料集
1、Dataset+DataLoader實作自定義資料集讀取方法 1.1、整體框架 1.2、例子講解 1.3、txt檔案的生成
2、ImageFolder+DataLoader實作本地資料匯入
盡管torchvision已經為我們準備了很多的資料集,直接通過如下陳述句便可以隨便呼叫,但是有時我們要處理自己的資料集,該怎么辦呢?
mnist_train = torchvision. datasets. MNIST( root= '~/Datasets/MNIST' , train= True , download= True , transform= transforms. ToTensor( ) )
1、Dataset+DataLoader實作自定義資料集讀取方法
創建自己的資料集需要繼承父類torch.utils.data.Dataset,同時需要多載兩個私有成員函式:def __len__(self)和def __getitem__(self, index) , def __len__(self)應該回傳資料集的大小;def __getitem__(self, index)接收一個index,然后回傳圖片資料和標簽,這個index通常指的是一個list的index,這個list的每個元素就包含了圖片資料的路徑和標簽資訊,如何制作這個list呢,通常的方法是將圖片的路徑和標簽資訊存盤在一個txt中,然后從該txt中讀取,
整個流程如下:
<style>#mermaid-svg-vMfTFmUYiyOiWhjR .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-vMfTFmUYiyOiWhjR .label text{fill:#333}#mermaid-svg-vMfTFmUYiyOiWhjR .node rect,#mermaid-svg-vMfTFmUYiyOiWhjR .node circle,#mermaid-svg-vMfTFmUYiyOiWhjR .node ellipse,#mermaid-svg-vMfTFmUYiyOiWhjR .node polygon,#mermaid-svg-vMfTFmUYiyOiWhjR .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-vMfTFmUYiyOiWhjR .node .label{text-align:center;fill:#333}#mermaid-svg-vMfTFmUYiyOiWhjR .node.clickable{cursor:pointer}#mermaid-svg-vMfTFmUYiyOiWhjR .arrowheadPath{fill:#333}#mermaid-svg-vMfTFmUYiyOiWhjR .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-vMfTFmUYiyOiWhjR .flowchart-link{stroke:#333;fill:none}#mermaid-svg-vMfTFmUYiyOiWhjR .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-vMfTFmUYiyOiWhjR .edgeLabel rect{opacity:0.9}#mermaid-svg-vMfTFmUYiyOiWhjR .edgeLabel span{color:#333}#mermaid-svg-vMfTFmUYiyOiWhjR .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-vMfTFmUYiyOiWhjR .cluster text{fill:#333}#mermaid-svg-vMfTFmUYiyOiWhjR div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-vMfTFmUYiyOiWhjR .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-vMfTFmUYiyOiWhjR text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-vMfTFmUYiyOiWhjR .actor-line{stroke:grey}#mermaid-svg-vMfTFmUYiyOiWhjR .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-vMfTFmUYiyOiWhjR .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-vMfTFmUYiyOiWhjR #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-vMfTFmUYiyOiWhjR .sequenceNumber{fill:#fff}#mermaid-svg-vMfTFmUYiyOiWhjR #sequencenumber{fill:#333}#mermaid-svg-vMfTFmUYiyOiWhjR #crosshead path{fill:#333;stroke:#333}#mermaid-svg-vMfTFmUYiyOiWhjR .messageText{fill:#333;stroke:#333}#mermaid-svg-vMfTFmUYiyOiWhjR .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-vMfTFmUYiyOiWhjR .labelText,#mermaid-svg-vMfTFmUYiyOiWhjR .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-vMfTFmUYiyOiWhjR .loopText,#mermaid-svg-vMfTFmUYiyOiWhjR .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-vMfTFmUYiyOiWhjR .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-vMfTFmUYiyOiWhjR .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-vMfTFmUYiyOiWhjR .noteText,#mermaid-svg-vMfTFmUYiyOiWhjR .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-vMfTFmUYiyOiWhjR .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-vMfTFmUYiyOiWhjR .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-vMfTFmUYiyOiWhjR .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-vMfTFmUYiyOiWhjR .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vMfTFmUYiyOiWhjR .section{stroke:none;opacity:0.2}#mermaid-svg-vMfTFmUYiyOiWhjR .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-vMfTFmUYiyOiWhjR .section2{fill:#fff400}#mermaid-svg-vMfTFmUYiyOiWhjR .section1,#mermaid-svg-vMfTFmUYiyOiWhjR .section3{fill:#fff;opacity:0.2}#mermaid-svg-vMfTFmUYiyOiWhjR .sectionTitle0{fill:#333}#mermaid-svg-vMfTFmUYiyOiWhjR .sectionTitle1{fill:#333}#mermaid-svg-vMfTFmUYiyOiWhjR .sectionTitle2{fill:#333}#mermaid-svg-vMfTFmUYiyOiWhjR .sectionTitle3{fill:#333}#mermaid-svg-vMfTFmUYiyOiWhjR .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vMfTFmUYiyOiWhjR .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-vMfTFmUYiyOiWhjR .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vMfTFmUYiyOiWhjR .grid path{stroke-width:0}#mermaid-svg-vMfTFmUYiyOiWhjR .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-vMfTFmUYiyOiWhjR .task{stroke-width:2}#mermaid-svg-vMfTFmUYiyOiWhjR .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vMfTFmUYiyOiWhjR .taskText:not([font-size]){font-size:11px}#mermaid-svg-vMfTFmUYiyOiWhjR .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vMfTFmUYiyOiWhjR .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-vMfTFmUYiyOiWhjR .task.clickable{cursor:pointer}#mermaid-svg-vMfTFmUYiyOiWhjR .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-vMfTFmUYiyOiWhjR .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-vMfTFmUYiyOiWhjR .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-vMfTFmUYiyOiWhjR .taskText0,#mermaid-svg-vMfTFmUYiyOiWhjR .taskText1,#mermaid-svg-vMfTFmUYiyOiWhjR .taskText2,#mermaid-svg-vMfTFmUYiyOiWhjR .taskText3{fill:#fff}#mermaid-svg-vMfTFmUYiyOiWhjR .task0,#mermaid-svg-vMfTFmUYiyOiWhjR .task1,#mermaid-svg-vMfTFmUYiyOiWhjR .task2,#mermaid-svg-vMfTFmUYiyOiWhjR .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-vMfTFmUYiyOiWhjR .taskTextOutside0,#mermaid-svg-vMfTFmUYiyOiWhjR .taskTextOutside2{fill:#000}#mermaid-svg-vMfTFmUYiyOiWhjR .taskTextOutside1,#mermaid-svg-vMfTFmUYiyOiWhjR .taskTextOutside3{fill:#000}#mermaid-svg-vMfTFmUYiyOiWhjR .active0,#mermaid-svg-vMfTFmUYiyOiWhjR .active1,#mermaid-svg-vMfTFmUYiyOiWhjR .active2,#mermaid-svg-vMfTFmUYiyOiWhjR .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-vMfTFmUYiyOiWhjR .activeText0,#mermaid-svg-vMfTFmUYiyOiWhjR .activeText1,#mermaid-svg-vMfTFmUYiyOiWhjR .activeText2,#mermaid-svg-vMfTFmUYiyOiWhjR .activeText3{fill:#000 !important}#mermaid-svg-vMfTFmUYiyOiWhjR .done0,#mermaid-svg-vMfTFmUYiyOiWhjR .done1,#mermaid-svg-vMfTFmUYiyOiWhjR .done2,#mermaid-svg-vMfTFmUYiyOiWhjR .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-vMfTFmUYiyOiWhjR .doneText0,#mermaid-svg-vMfTFmUYiyOiWhjR .doneText1,#mermaid-svg-vMfTFmUYiyOiWhjR .doneText2,#mermaid-svg-vMfTFmUYiyOiWhjR .doneText3{fill:#000 !important}#mermaid-svg-vMfTFmUYiyOiWhjR .crit0,#mermaid-svg-vMfTFmUYiyOiWhjR .crit1,#mermaid-svg-vMfTFmUYiyOiWhjR .crit2,#mermaid-svg-vMfTFmUYiyOiWhjR .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-vMfTFmUYiyOiWhjR .activeCrit0,#mermaid-svg-vMfTFmUYiyOiWhjR .activeCrit1,#mermaid-svg-vMfTFmUYiyOiWhjR .activeCrit2,#mermaid-svg-vMfTFmUYiyOiWhjR .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-vMfTFmUYiyOiWhjR .doneCrit0,#mermaid-svg-vMfTFmUYiyOiWhjR .doneCrit1,#mermaid-svg-vMfTFmUYiyOiWhjR .doneCrit2,#mermaid-svg-vMfTFmUYiyOiWhjR .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-vMfTFmUYiyOiWhjR .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-vMfTFmUYiyOiWhjR .milestoneText{font-style:italic}#mermaid-svg-vMfTFmUYiyOiWhjR .doneCritText0,#mermaid-svg-vMfTFmUYiyOiWhjR .doneCritText1,#mermaid-svg-vMfTFmUYiyOiWhjR .doneCritText2,#mermaid-svg-vMfTFmUYiyOiWhjR .doneCritText3{fill:#000 !important}#mermaid-svg-vMfTFmUYiyOiWhjR .activeCritText0,#mermaid-svg-vMfTFmUYiyOiWhjR .activeCritText1,#mermaid-svg-vMfTFmUYiyOiWhjR .activeCritText2,#mermaid-svg-vMfTFmUYiyOiWhjR .activeCritText3{fill:#000 !important}#mermaid-svg-vMfTFmUYiyOiWhjR .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vMfTFmUYiyOiWhjR g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-vMfTFmUYiyOiWhjR g.classGroup text .title{font-weight:bolder}#mermaid-svg-vMfTFmUYiyOiWhjR g.clickable{cursor:pointer}#mermaid-svg-vMfTFmUYiyOiWhjR g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-vMfTFmUYiyOiWhjR g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-vMfTFmUYiyOiWhjR .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-vMfTFmUYiyOiWhjR .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-vMfTFmUYiyOiWhjR .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-vMfTFmUYiyOiWhjR .dashed-line{stroke-dasharray:3}#mermaid-svg-vMfTFmUYiyOiWhjR #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-vMfTFmUYiyOiWhjR #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-vMfTFmUYiyOiWhjR #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-vMfTFmUYiyOiWhjR #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-vMfTFmUYiyOiWhjR #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-vMfTFmUYiyOiWhjR #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-vMfTFmUYiyOiWhjR #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-vMfTFmUYiyOiWhjR #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-vMfTFmUYiyOiWhjR .commit-id,#mermaid-svg-vMfTFmUYiyOiWhjR .commit-msg,#mermaid-svg-vMfTFmUYiyOiWhjR .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vMfTFmUYiyOiWhjR .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vMfTFmUYiyOiWhjR .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vMfTFmUYiyOiWhjR g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vMfTFmUYiyOiWhjR g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-vMfTFmUYiyOiWhjR g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-vMfTFmUYiyOiWhjR g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-vMfTFmUYiyOiWhjR g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-vMfTFmUYiyOiWhjR g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-vMfTFmUYiyOiWhjR .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-vMfTFmUYiyOiWhjR .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-vMfTFmUYiyOiWhjR .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-vMfTFmUYiyOiWhjR .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-vMfTFmUYiyOiWhjR .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-vMfTFmUYiyOiWhjR .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-vMfTFmUYiyOiWhjR .edgeLabel text{fill:#333}#mermaid-svg-vMfTFmUYiyOiWhjR .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-vMfTFmUYiyOiWhjR .node circle.state-start{fill:black;stroke:black}#mermaid-svg-vMfTFmUYiyOiWhjR .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-vMfTFmUYiyOiWhjR #statediagram-barbEnd{fill:#9370db}#mermaid-svg-vMfTFmUYiyOiWhjR .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-vMfTFmUYiyOiWhjR .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-vMfTFmUYiyOiWhjR .statediagram-state .divider{stroke:#9370db}#mermaid-svg-vMfTFmUYiyOiWhjR .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-vMfTFmUYiyOiWhjR .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-vMfTFmUYiyOiWhjR .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-vMfTFmUYiyOiWhjR .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-vMfTFmUYiyOiWhjR .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-vMfTFmUYiyOiWhjR .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-vMfTFmUYiyOiWhjR .note-edge{stroke-dasharray:5}#mermaid-svg-vMfTFmUYiyOiWhjR .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-vMfTFmUYiyOiWhjR .error-icon{fill:#522}#mermaid-svg-vMfTFmUYiyOiWhjR .error-text{fill:#522;stroke:#522}#mermaid-svg-vMfTFmUYiyOiWhjR .edge-thickness-normal{stroke-width:2px}#mermaid-svg-vMfTFmUYiyOiWhjR .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-vMfTFmUYiyOiWhjR .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-vMfTFmUYiyOiWhjR .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-vMfTFmUYiyOiWhjR .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-vMfTFmUYiyOiWhjR .marker{fill:#333}#mermaid-svg-vMfTFmUYiyOiWhjR .marker.cross{stroke:#333}
:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}</style>
<style>#mermaid-svg-vMfTFmUYiyOiWhjR {
color: rgba(0, 0, 0, 0.75);
font: ;
}</style>
創建相應的txt檔案
創建__init__函式進行引數和函式初始化以及創建list
將list傳入__getitem__呼叫index對應的一張圖片進行處理并回傳處理后的圖片與對應的label
__len__回傳資料集大小
創建實體并將其匯入DataLoader中進行設定
1.1、整體框架
class MyDataset ( torch. utils. data. Dataset) : #需要繼承torch.utils.data.Dataset
def __init__ ( self) :
#對繼承自父類的屬性進行初始化(好像沒有這句也可以??)
super ( MyDataset, self) . __init__( )
# TODO
#1、初始化一些引數和函式,方便在__getitem__函式中呼叫,
#2、制作__getitem__函式所要用到的圖片和對應標簽的list,
#也就是在這個模塊里,我們所做的作業就是初始化該類的一些基本引數,
pass
def __getitem__ ( self, index) :
# TODO
#1、根據list從檔案中讀取一個資料(例如,使用numpy.fromfile,PIL.Image.open),
#2、預處理資料(例如torchvision.Transform),
#3、回傳資料對(例如影像和標簽),
#這里需要注意的是,這步所處理的是index所對應的一個樣本,
pass
def __len__ ( self) :
#回傳資料集大小
return len ( )
1.2、例子講解
給出一個最簡單的例子,來理解整個程序,
第一步 :先收集幾張圖片作為自己的資料集,然后自己手動創建一個txt檔案(關于txt檔案,通過python和matlab可以很容易的創建)儲存圖片對應的label,
圖片檔案如下
相應的txt檔案如下
第二步 :創建自己的資料集類,
import torch
import torchvision
from torchvision import transforms
from PIL import Image
from torch. utils. data import Dataset
from torch. utils. data import DataLoader
#路徑是自己電腦里所對應的路徑
datapath = r'E:\Python\DeepLearning\Datasets\testdata'
txtpath = r'E:\Python\DeepLearning\Datasets\testdata\label.txt'
class MyDataset ( Dataset) :
def __init__ ( self, txtpath) :
#創建一個list用來儲存圖片和標簽資訊
imgs = [ ]
#打開第一步創建的txt檔案,按行讀取,將結果以元組方式保存在imgs里
datainfo = open ( txtpath, 'r' )
for line in datainfo:
line = line. strip( '\n' )
words = line. split( )
imgs. append( ( words[ 0 ] , words[ 1 ] ) )
self. imgs = imgs
#回傳資料集大小
def __len__ ( self) :
return len ( self. imgs)
#打開index對應圖片進行預處理后return回處理后的圖片和標簽
def __getitem__ ( self, index) :
pic, label = self. imgs[ index]
pic = Image. open ( datapath+ '\\' + pic)
pic = transforms. ToTensor( ) ( pic)
return pic, label
#實體化物件
data = MyDataset( txtpath)
#將資料集匯入DataLoader,進行shuffle以及選取batch_size
data_loader = DataLoader( data, batch_size= 2 , shuffle= True , num_workers= 0 )
#Windows里num_works只能為0,其他值會報錯
經過以上兩步處理,就獲得了可以輸入到神經網路里的自己的資料集了,我們可以查看一下我們所獲得的data_loader:
for pics, label in data_loader:
print ( pics, label)
輸出如下:
tensor( [ [ [ [ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
. . . ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ] ] ,
[ [ [ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
. . . ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ] ] ] ) ( '4' , '2' )
tensor( [ [ [ [ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
. . . ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ] ] ,
[ [ [ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
. . . ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ] ] ] ) ( '2' , '1' )
tensor( [ [ [ [ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
. . . ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ] ] ,
[ [ [ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
. . . ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ] ] ] ) ( '0' , '1' )
tensor( [ [ [ [ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
. . . ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ] ] ,
[ [ [ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
. . . ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ] ] ] ) ( '4' , '0' )
tensor( [ [ [ [ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
. . . ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ] ] ,
[ [ [ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
. . . ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ,
[ 0 . , 0 . , 0 . , . . . , 0 . , 0 . , 0 . ] ] ] ] ) ( '3' , '3' )
以上結果顯示,data_loader這個迭代器里存盤的是每2個一組(batch_size)的圖片像素資訊以及對應的標簽資訊,也就是我們后續要匯入到神經網路里的資料,
以上操作只是一個最簡單的用來加深理解的例子,實際應用時會比這復雜很多,比如影像的渲染、變換等,但是基本流程都是一樣的,
1.3、txt檔案的生成
這部分留到以后再添加進來 pass
2、ImageFolder+DataLoader實作本地資料匯入
在pytorch中提供了torchvision.datasets.ImageFolder讓我們訓練自己的影像,ImageFolder假設所有的檔案按檔案夾保存,每個檔案夾下存盤同一個類別的圖片,檔案夾名為類名,其建構式如下:
ImageFolder( root, transform= None , target_transform= None , loader= default_loader)
它主要有四個引數: root:在root指定的路徑下尋找圖片 transform:對loader讀取圖片的回傳物件進行轉換操作(ToTensor等) target_transform:對label的轉換 loader:給定路徑后如何讀取圖片,默認讀取為RGB格式的PIL Image物件
檔案夾嚴格按照如下方式保存:
.
├──train
| ├──類別1
| | ├──* . jpg
| | ├──* . jpg
| | └──. . .
| ├──類別2
| | ├──* . jpg
| | ├──* . jpg
| | └──. . .
| └──. . .
└──test
├──類別1
| ├──* . jpg
| ├──* . jpg
| └──. . .
├──類別2
| ├──* . jpg
| ├──* . jpg
| └──. . .
└──. . .
實作代碼如下
transform = transforms. ToTensor( )
root = r'E:\Python\DeepLearning\Datasets\mymnist\train'
# 使用torchvision.datasets.ImageFolder讀取資料集 指定train 和 test檔案夾
train_data = torchvision. datasets. ImageFolder( root, transform= transform)
train_iter = torch. utils. data. DataLoader( train_data, batch_size= 256 , shuffle= True , num_workers= 0 )
test_data = torchvision. datasets. ImageFolder( root, transform= transform)
test_iter = torch. utils. data. DataLoader( test_data, batch_size= 256 , shuffle= True , num_workers= 0 )
參考資料 https://blog.csdn.net/sinat_42239797/article/details/90641659