給AI萌新:pytorch數(shù)據(jù)讀取深入理解
來源:投稿 作者:小灰灰
編輯:學(xué)姐
了解數(shù)據(jù)
萌新:
我現(xiàn)在什么基礎(chǔ)也沒有,我要學(xué)習(xí)深度學(xué)習(xí),學(xué)習(xí)cv,學(xué)習(xí)nlp。
我:
首先我們知道,深度學(xué)習(xí)是建立在數(shù)據(jù)集的基礎(chǔ)上?,F(xiàn)在呢,我要有數(shù)據(jù),數(shù)據(jù)可以選擇官網(wǎng)下載,或者自己手機(jī)上隨便找些數(shù)據(jù)。
假設(shè)我有下圖人民幣數(shù)據(jù),有100張一元人民幣和一百張100元人民幣,總共200張,使用代碼劃分為訓(xùn)練,驗(yàn)證,測試集比例為8:1:1

現(xiàn)在我有數(shù)據(jù)啦,但怎么訓(xùn)練呢,就要了解epoch
,iteration
,batchsize
Epoch
:是整個(gè)訓(xùn)練集數(shù)據(jù)樣本都輸入到模型里面了,稱為一個(gè)epoch。
iteration
:是一批樣本輸入到模型中,就稱為一個(gè)iteration。
batchsize
:是批大小,假設(shè)我們有一個(gè)數(shù)據(jù)集,里面包含80張圖片,我把batchsize設(shè)置為8,那么我們需要10個(gè)iteration才能訓(xùn)練完整個(gè)數(shù)據(jù)集,就是一個(gè)epoch。
代碼加載數(shù)據(jù)
現(xiàn)在我們知道了數(shù)據(jù)集,那么用代碼怎樣實(shí)現(xiàn)加載呢,就會(huì)用到pytorch框架里面的dataset,dataloader,或者tensorflow,mxnet框架里面的數(shù)據(jù)加載的方法。 我們要設(shè)置讀取數(shù)據(jù)集的硬盤路徑,

接下來構(gòu)建dataset和dataloader

上面是準(zhǔn)備工作,具體的開始在
可以看到train_loader
里面會(huì)調(diào)用RMBDataset
,那么下圖就是這個(gè)類,最主要的就是__getitem__函數(shù)
的編寫。輸入框架中隨機(jī)打亂的index
,得到數(shù)據(jù)和標(biāo)簽。因此,pytorch
會(huì)從dataset
里面shuffle=True
的條件下,隨機(jī)打亂形成index
,復(fù)寫__getittem__函數(shù)
,將下標(biāo)index
輸入,實(shí)現(xiàn)自己的功能。

因此最終獲取數(shù)據(jù)出來的結(jié)果為:獲取到圖片的路徑,然后用image讀取出來。

我們現(xiàn)在開始訓(xùn)練,拿到train_loader里面的值,就可以了。
數(shù)據(jù)預(yù)處理
當(dāng)然上面的步驟只是單獨(dú)的獲取到了數(shù)據(jù)集,如果我們想要提高模型的泛化能力,就得使用transforms,對圖片進(jìn)行 數(shù)據(jù)中心化,縮放,裁剪,填充等的一些操作,當(dāng)然pytorch下的torchvision里面已經(jīng)做好了基本的一些數(shù)據(jù)增強(qiáng)的操作。
那么我們就要知道,在框架中應(yīng)該怎么寫,根據(jù)上圖RMBDataset這個(gè)類,在創(chuàng)建mydataset的時(shí)候就已經(jīng)傳進(jìn)去框架里面指定好的數(shù)據(jù)增強(qiáng)類型。
那么我們就需要知道,到底框架哪里執(zhí)行transforms
運(yùn)算。
根據(jù)第二步,我們在getitem中獲取到數(shù)據(jù),下一步就是數(shù)據(jù)增強(qiáng)。

這里的self.transform
就會(huì)根據(jù)寫的數(shù)據(jù)增強(qiáng)進(jìn)行運(yùn)算。

以上就是對數(shù)據(jù)進(jìn)行處理的過程,那么對每一步數(shù)據(jù)增強(qiáng),我們都可以進(jìn)行可視化,看效果是否與自己一樣。
關(guān)注【學(xué)姐帶你玩AI】公眾號
回復(fù)“500”
免費(fèi)領(lǐng)取220+篇AI必讀論文PDF資料&講解視頻