【深度學(xué)習(xí)DL-PyTorch】七崩泡、加載圖像數(shù)據(jù)(Loading Image Data)

import torch
from torchvision import datasets, transforms

加載圖像的最簡(jiǎn)單方式是使用 torchvisiondatasets.ImageFolder文檔)壤靶。使用 ImageFolder丁逝,就是這樣:

dataset = datasets.ImageFolder('path/to/data', transform=transform)

其中 'path/to/data' 是通往數(shù)據(jù)目錄的文件路徑羽资,transform 是用 torchvision 中的 transforms 模塊構(gòu)建的處理步驟列表淘菩。ImageFolder 中的文件和目錄應(yīng)按以下格式構(gòu)建:

root/dog/xxx.png
root/dog/xxy.png
root/dog/xxz.png

root/cat/123.png
root/cat/nsdf3.png
root/cat/asd932_.png

每個(gè)圖像類別都有各自存儲(chǔ)圖像的目錄(catdog)。然后使用從目錄名中提取的類別標(biāo)記圖像屠升。圖像 123.png 將采用類別標(biāo)簽 cat潮改。你可以從此頁(yè)面下載已經(jīng)采用此結(jié)構(gòu)的數(shù)據(jù)集。在其中已被拆分成了訓(xùn)練集和測(cè)試集腹暖。

一进陡、 轉(zhuǎn)換

使用 ImageFolder 加載數(shù)據(jù)時(shí),你需要定義轉(zhuǎn)換微服。例如趾疚,圖像的尺寸不相同,但是我們需要將它們變成統(tǒng)一尺寸以蕴,才能用于訓(xùn)練模型柏锄。你可以使用 transforms.Resize() 調(diào)整尺寸或使用 transforms.CenterCrop()施逾、transforms.RandomResizedCrop() 等裁剪圖像。我們還需要使用 transforms.ToTensor() 將圖像轉(zhuǎn)換為 PyTorch 張量。通常陌知,你將使用 transforms.Compose()來(lái)將這些轉(zhuǎn)換結(jié)合到一條流水線中,這條流水線接收包含轉(zhuǎn)換的列表梗醇,并按順序運(yùn)行捉捅。流程大概為縮放、裁剪习劫,然后轉(zhuǎn)換為張量:

transform = transforms.Compose([transforms.Resize(255),
                                 transforms.CenterCrop(224),
                                 transforms.ToTensor()])

二咆瘟、 數(shù)據(jù)加載器

加載 ImageFolder 后,你需要將其傳入 DataLoader诽里。DataLoader 接受數(shù)據(jù)集(例如要從 ImageFolder 獲得的數(shù)據(jù)集)袒餐,并返回批次圖像和相應(yīng)的標(biāo)簽。你可以設(shè)置各種參數(shù),例如批次大小灸眼,或者在每個(gè)周期之后是否重排數(shù)據(jù)卧檐。

dataloader = torch.utils.data.DataLoader(dataset, batch_size=32, shuffle=True)

dataloader 是一個(gè)生成器。要從中獲取數(shù)據(jù)焰宣,你需要遍歷它霉囚,或?qū)⑺D(zhuǎn)換成迭代器并調(diào)用 next()

# Looping through it, get a batch on each loop 
for images, labels in dataloader:
    pass

# Get one batch
images, labels = next(iter(dataloader))

三匕积、 數(shù)據(jù)增強(qiáng)

訓(xùn)練神經(jīng)網(wǎng)絡(luò)的一個(gè)常見策略是在輸入數(shù)據(jù)本身里引入隨機(jī)性佛嬉。例如,你可以在訓(xùn)練過(guò)程中隨機(jī)地旋轉(zhuǎn)闸天、翻轉(zhuǎn)暖呕、縮放和/或裁剪圖像。這樣一來(lái)苞氮,你的神經(jīng)網(wǎng)絡(luò)在處理位置湾揽、大小、方向不同的相同圖像時(shí)笼吟,可以更好地進(jìn)行泛化库物。
要隨機(jī)旋轉(zhuǎn)、縮放贷帮、裁剪圖像戚揭,然后翻轉(zhuǎn)圖像,你需要如下所示地定義轉(zhuǎn)換:

train_transforms = transforms.Compose([transforms.RandomRotation(30),
                                       transforms.RandomResizedCrop(224),
                                       transforms.RandomHorizontalFlip(),
                                       transforms.ToTensor(),
                                       transforms.Normalize([0.5, 0.5, 0.5], 
                                                            [0.5, 0.5, 0.5])])

另外撵枢,還需要使用 transforms.Normalize 標(biāo)準(zhǔn)化圖像民晒。傳入均值和標(biāo)準(zhǔn)偏差列表,然后標(biāo)準(zhǔn)化顏色通道锄禽。

減去 mean 使數(shù)據(jù)以 0 居中潜必,除以 std 使值位于 -1 到 1 之間。標(biāo)準(zhǔn)化有助于神經(jīng)網(wǎng)絡(luò)使權(quán)重接近 0沃但,這能使反向傳播更為穩(wěn)定磁滚。不標(biāo)準(zhǔn)化的話,網(wǎng)絡(luò)往往會(huì)學(xué)習(xí)失敗宵晚。

你可以在此處查看可用的轉(zhuǎn)換列表垂攘。測(cè)試時(shí),不能改變圖像(但是需要以同一方式標(biāo)準(zhǔn)化)淤刃。因此晒他,在驗(yàn)證/測(cè)試圖像時(shí),通常只能調(diào)整大小和裁剪圖像钝凶。

%matplotlib inline
%config InlineBackend.figure_format = 'retina'

import matplotlib.pyplot as plt

import torch
from torchvision import datasets, transforms

data_dir = 'Cat_Dog_data'

# TODO: Define transforms for the training data and testing data
train_transforms = transforms.Compose([transforms.RandomRotation(30),
                                       transforms.RandomResizedCrop(224),
                                       transforms.RandomHorizontalFlip(),
                                       transforms.ToTensor(),
                                       transforms.Normalize([0.5, 0.5, 0.5],
                                                            [0.5, 0.5, 0.5])])

# test_transforms = transforms.Compose([transforms.RandomRotation(30),
#                                       transforms.RandomResizedCrop(224),
#                                       transforms.RandomHorizontalFlip(),
#                                       transforms.ToTensor(),
#                                       transforms.Normalize([0.5, 0.5, 0.5],
#                                                            [0.5, 0.5, 0.5])])

#測(cè)試時(shí)仪芒,不能改變圖像(但是需要以同一方式標(biāo)準(zhǔn)化)唁影。因此耕陷,在驗(yàn)證/測(cè)試圖像時(shí)掂名,通常只能調(diào)整大小和裁#剪圖像。
test_transforms = transforms.Compose([transforms.Resize(255),
                                      transforms.CenterCrop(224),
                                      transforms.ToTensor()])

# Pass transforms in here, then run the next cell to see how the transforms look
train_data = datasets.ImageFolder(data_dir + '/train', transform=train_transforms)
test_data = datasets.ImageFolder(data_dir + '/test', transform=test_transforms)

trainloader = torch.utils.data.DataLoader(train_data, batch_size=32)
testloader = torch.utils.data.DataLoader(test_data, batch_size=32)

# change this to the trainloader or testloader 
data_iter = iter(testloader)

images, labels = next(data_iter)
fig, axes = plt.subplots(figsize=(10,4), ncols=4)
for ii in range(4):
    ax = axes[ii]
    helper.imshow(images[ii], ax=ax, normalize=False)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哟沫,一起剝皮案震驚了整個(gè)濱河市饺蔑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嗜诀,老刑警劉巖猾警,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異隆敢,居然都是意外死亡发皿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門拂蝎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)穴墅,“玉大人,你說(shuō)我怎么就攤上這事温自⌒酰” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵悼泌,是天一觀的道長(zhǎng)松捉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)馆里,這世上最難降的妖魔是什么隘世? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮鸠踪,結(jié)果婚禮上以舒,老公的妹妹穿的比我還像新娘。我一直安慰自己慢哈,他們只是感情好蔓钟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著卵贱,像睡著了一般滥沫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上键俱,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天兰绣,我揣著相機(jī)與錄音,去河邊找鬼编振。 笑死缀辩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播臀玄,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瓢阴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了健无?” 一聲冷哼從身側(cè)響起荣恐,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎累贤,沒想到半個(gè)月后叠穆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡臼膏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年硼被,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渗磅。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嚷硫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出夺溢,到底是詐尸還是另有隱情论巍,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布风响,位于F島的核電站嘉汰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏状勤。R本人自食惡果不足惜鞋怀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望持搜。 院中可真熱鬧密似,春花似錦、人聲如沸葫盼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贫导。三九已至抛猫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間孩灯,已是汗流浹背闺金。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留峰档,地道東北人败匹。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓寨昙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親掀亩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子舔哪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容