pytorch实现数据增强的原理
pytorch的數(shù)據(jù)增強(qiáng)功能并非是事先對(duì)整個(gè)數(shù)據(jù)集進(jìn)行數(shù)據(jù)增強(qiáng)處理,而是在從dataloader中獲取訓(xùn)練數(shù)據(jù)的時(shí)候(獲取每個(gè)epoch的時(shí)候)才進(jìn)行數(shù)據(jù)增強(qiáng)。
舉個(gè)例子,如下面的數(shù)據(jù)增強(qiáng)代碼:
transform_train = transforms.Compose([transforms.RandomCrop(32, padding=4), # 對(duì)圖像四周各填充4個(gè)0像素,然后隨機(jī)裁剪成32*32transforms.RandomHorizontalFlip(), # 按0.5的概率水平翻轉(zhuǎn)圖片transforms.ToTensor(),transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)), ])假設(shè)數(shù)據(jù)集一共有100張圖片,pytorch并非對(duì)數(shù)據(jù)集中的每張圖片進(jìn)行隨機(jī)裁剪,再隨機(jī)翻轉(zhuǎn),將數(shù)據(jù)集擴(kuò)增到200張,然后用這固定的200張圖來訓(xùn)練網(wǎng)絡(luò),這是錯(cuò)誤的理解。
正確的理解應(yīng)該是dataloader在每次生成epoch時(shí)才對(duì)數(shù)據(jù)集進(jìn)行以上數(shù)據(jù)增強(qiáng)操作。由于數(shù)據(jù)增強(qiáng)有些操作是具有隨機(jī)性的(例如上面的隨機(jī)裁剪和隨機(jī)翻轉(zhuǎn)),導(dǎo)致每次epoch產(chǎn)生的數(shù)據(jù)都不相同,例如同一張圖片在有的epoch翻轉(zhuǎn)了,在有的epoch沒有翻轉(zhuǎn),或者同一張圖片在各個(gè)epoch裁剪的位置不一樣,所以每次用來訓(xùn)練的數(shù)據(jù)不相同,到達(dá)了數(shù)據(jù)增強(qiáng)的目的。
當(dāng)然,有些數(shù)據(jù)增強(qiáng)操作不具有隨機(jī)性,如CenterCrop,每次都是對(duì)圖片中間位置進(jìn)行裁剪,不管在哪個(gè)epoch,裁剪出來的圖片都一樣。
總結(jié)
以上是生活随笔為你收集整理的pytorch实现数据增强的原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python脚本编程实例_从零学pyth
- 下一篇: OpenCV的数据类型——基础数据类型