pytorch torchvision.ImageFolder的用法介紹
torchvision.datasets
Datasets 擁有以下API:
__getitem__
__len__
Datasets都是 torch.utils.data.Dataset的子類(lèi),所以,他們也可以通過(guò)torch.utils.data.DataLoader使用多線程(python的多進(jìn)程)。
舉例說(shuō)明:
torch.utils.data.DataLoader(coco_cap, batch_size=args.batchSize, shuffle=True, num_workers=args.nThreads)
在構(gòu)造函數(shù)中,不同的數(shù)據(jù)集直接的構(gòu)造函數(shù)會(huì)有些許不同,但是他們共同擁有 keyword 參數(shù)。
transform: 一個(gè)函數(shù),原始圖片作為輸入,返回一個(gè)轉(zhuǎn)換后的圖片。
target_transform - 一個(gè)函數(shù),輸入為target,輸出對(duì)其的轉(zhuǎn)換。例子,輸入的是圖片標(biāo)注的string,輸出為word的索引。
ImageFolder
一個(gè)通用的數(shù)據(jù)加載器,數(shù)據(jù)集中的數(shù)據(jù)以以下方式組織
root/dog/xxx.png root/dog/xxy.png root/dog/xxz.png root/cat/123.png root/cat/nsdf3.png root/cat/asd932_.png
既其默認(rèn)你的數(shù)據(jù)集已經(jīng)自覺(jué)按照要分配的類(lèi)型分成了不同的文件夾,一種類(lèi)型的文件夾下面只存放一種類(lèi)型的圖片
運(yùn)行命令為:
import torchvision.datasets as dset
dset.ImageFolder(root="root folder path", [transform, target_transform])
root : 指定圖片存儲(chǔ)的路徑,在下面的例子中是'./data/dogcat_2'
transform: 一個(gè)函數(shù),原始圖片作為輸入,返回一個(gè)轉(zhuǎn)換后的圖片。
target_transform - 一個(gè)函數(shù),輸入為target,輸出對(duì)其的轉(zhuǎn)換。例子,輸入的是圖片標(biāo)注的string,輸出為word的索引。
有以下成員變量:
self.classes - 用一個(gè)list保存 類(lèi)名
self.class_to_idx - 類(lèi)名對(duì)應(yīng)的 索引
self.imgs - 保存(img-path, class) tuple的list
即后面可以通過(guò)查看返回的數(shù)據(jù)集對(duì)象來(lái)查看相應(yīng)的值,下面舉例說(shuō)明:
圖片為:
可見(jiàn)分成了cat和dog兩類(lèi)
import torchvision.datasets as dset dataset = dset.ImageFolder('./data/dogcat_2') #沒(méi)有transform,先看看取得的原始圖像數(shù)據(jù) print(dataset.classes) #根據(jù)分的文件夾的名字來(lái)確定的類(lèi)別 print(dataset.class_to_idx) #按順序?yàn)檫@些類(lèi)別定義索引為0,1... print(dataset.imgs) #返回從所有文件夾中得到的圖片的路徑以及其類(lèi)別
返回:
['cat', 'dog'] {'cat': 0, 'dog': 1} [('./data/dogcat_2/cat/cat.12484.jpg', 0), ('./data/dogcat_2/cat/cat.12485.jpg', 0), ('./data/dogcat_2/cat/cat.12486.jpg', 0), ('./data/dogcat_2/cat/cat.12487.jpg', 0), ('./data/dogcat_2/dog/dog.12496.jpg', 1), ('./data/dogcat_2/dog/dog.12497.jpg', 1), ('./data/dogcat_2/dog/dog.12498.jpg', 1), ('./data/dogcat_2/dog/dog.12499.jpg', 1)]
如果在數(shù)據(jù)下面又添加了一個(gè)類(lèi)型'others',那么訪問(wèn)類(lèi)型的時(shí)候返回的就是:
['cat', 'dog', 'others'] {'cat': 0, 'dog': 1, 'others': 2}
查看得到的圖片數(shù)據(jù):
#從返回結(jié)果可見(jiàn)得到的數(shù)據(jù)仍是PIL Image對(duì)象 print(dataset[0]) print(dataset[0][0]) print(dataset[0][1]) #得到的是類(lèi)別0,即cat
返回:
(<PIL.Image.Image image mode=RGB size=497x500 at 0x11D99A9B0>, 0) <PIL.Image.Image image mode=RGB size=497x500 at 0x11DD24278> 0
然后定義一個(gè)對(duì)數(shù)據(jù)進(jìn)行處理的transform:
#可以看出來(lái)此時(shí)得到的圖片數(shù)據(jù)已經(jīng)是處理過(guò)后的tensor數(shù)據(jù)了 print(dataset[0][0]) print(dataset[0][0].size()) #大小也是經(jīng)過(guò)設(shè)定后的大小224 print(dataset[0][1]) #得到的是類(lèi)別0,即cat
返回:
tensor([[[-0.7412, -0.7490, -0.7725, ..., 0.3176, 0.3412, 0.3725], [-0.7333, -0.7412, -0.7882, ..., 0.3255, 0.3647, 0.4039], [-0.7098, -0.7569, -0.8039, ..., 0.3255, 0.3725, 0.4039], ..., [ 0.3961, 0.3961, 0.4039, ..., 0.2627, 0.2627, 0.2549], [ 0.4196, 0.4039, 0.4118, ..., 0.2549, 0.2392, 0.2314], [ 0.4275, 0.4275, 0.4431, ..., 0.2314, 0.2314, 0.2235]], [[-0.7412, -0.7490, -0.7725, ..., 0.3882, 0.3725, 0.3569], [-0.7333, -0.7412, -0.7882, ..., 0.3961, 0.3961, 0.3882], [-0.7098, -0.7569, -0.8039, ..., 0.3882, 0.4039, 0.3882], ..., [ 0.0431, 0.0510, 0.0667, ..., -0.0824, -0.0824, -0.0902], [ 0.0510, 0.0431, 0.0588, ..., -0.0824, -0.1059, -0.1137], [ 0.0353, 0.0353, 0.0510, ..., -0.0902, -0.1059, -0.1216]], [[-0.8353, -0.8431, -0.8667, ..., 0.3255, 0.3255, 0.3255], [-0.8196, -0.8275, -0.8824, ..., 0.3333, 0.3490, 0.3569], [-0.7804, -0.8353, -0.8667, ..., 0.3333, 0.3569, 0.3569], ..., [-0.2863, -0.2784, -0.2627, ..., -0.3569, -0.3569, -0.3647], [-0.2549, -0.2706, -0.2549, ..., -0.3569, -0.3804, -0.3882], [-0.2235, -0.2471, -0.2392, ..., -0.3569, -0.3804, -0.4039]]]) torch.Size([3, 224, 224])
以上這篇pytorch torchvision.ImageFolder的用法介紹就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python使用add_subplot與subplot畫(huà)子圖操作示例
這篇文章主要介紹了Python使用add_subplot與subplot畫(huà)子圖操作,涉及Python使用matplotlib模塊進(jìn)行圖形繪制的相關(guān)操作技巧,需要的朋友可以參考下2018-06-06Keras多線程機(jī)制與flask多線程沖突的解決方案
這篇文章主要介紹了Keras多線程機(jī)制與flask多線程沖突的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05Python基于Hypothesis測(cè)試庫(kù)生成測(cè)試數(shù)據(jù)
這篇文章主要介紹了Python基于Hypothesis測(cè)試庫(kù)生成測(cè)試數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04Tensorflow 使用pb文件保存(恢復(fù))模型計(jì)算圖和參數(shù)實(shí)例詳解
今天小編就為大家分享一篇Tensorflow 使用pb文件保存(恢復(fù))模型計(jì)算圖和參數(shù)實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02推薦下python/ironpython:從入門(mén)到精通
推薦下python/ironpython:從入門(mén)到精通...2007-10-10Python使用Matplotlib實(shí)現(xiàn)Logos設(shè)計(jì)代碼
這篇文章主要介紹了Python使用Matplotlib實(shí)現(xiàn)Logos設(shè)計(jì)代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12在Python下使用Txt2Html實(shí)現(xiàn)網(wǎng)頁(yè)過(guò)濾代理的教程
這篇文章主要介紹了在Python下使用Txt2Html實(shí)現(xiàn)網(wǎng)頁(yè)過(guò)濾代理的教程,來(lái)自IBM官方開(kāi)發(fā)者技術(shù)文檔,需要的朋友可以參考下2015-04-04在Python中輸入一個(gè)以空格為間隔的數(shù)組方法
今天小編就為大家分享一篇在Python中輸入一個(gè)以空格為間隔的數(shù)組方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11