Pytorch使用技巧之Dataloader中的collate_fn參數(shù)詳析
以MNIST為例
from torchvision import datasets mnist = datasets.MNIST(root='./data/', train=True, download=True) print(mnist[0])
結(jié)果
(<PIL.Image.Image image mode=L size=28x28 at 0x196E3F1D898>, 5)
MINIST數(shù)據(jù)集的dataset是由一張圖片和一個(gè)label組成的元組
dataloader = torch.utils.data.DataLoader(dataset=mnist, batch_size=2, shuffle=True,collate_fn=lambda x:x)
for each in dataloader:
print(each)
break
結(jié)果
[(<PIL.Image.Image image mode=L size=28x28 at 0x2CB3B105630>, 0), (<PIL.Image.Image image mode=L size=28x28 at 0x2CB3B105668>, 2)]
collate_fn為lamda x:x時(shí)表示對(duì)傳入進(jìn)來的數(shù)據(jù)不做處理
下面自定義collate_fn看看什么效果
def collate(data):
img = []
label = []
for each in data:
img.append(each[0])
label.append(each[1])
return img,label
dataloader = torch.utils.data.DataLoader(dataset=mnist, batch_size=2, shuffle=True,collate_fn=lambda x:collate(x))
for each in dataloader:
print(each)
break
結(jié)果
([<PIL.Image.Image image mode=L size=28x28 at 0x241433A36D8>, <PIL.Image.Image image mode=L size=28x28 at 0x241433A3710>], [9, 3])
說明:若不設(shè)置collate_fn參數(shù)則會(huì)使用默認(rèn)處理函數(shù)
但必須保證傳進(jìn)來的數(shù)據(jù)都是tensor格式否則會(huì)報(bào)錯(cuò)
附:DataLoader完整的參數(shù)表如下:
class torch.utils.data.DataLoader(
dataset,
batch_size=1,
shuffle=False,
sampler=None,
batch_sampler=None,
num_workers=0,
collate_fn=<function default_collate>,
pin_memory=False,
drop_last=False,
timeout=0,
worker_init_fn=None)
DataLoader在數(shù)據(jù)集上提供單進(jìn)程或多進(jìn)程的迭代器
幾個(gè)關(guān)鍵的參數(shù)意思:
- shuffle:設(shè)置為True的時(shí)候,每個(gè)世代都會(huì)打亂數(shù)據(jù)集
- collate_fn:如何取樣本的,我們可以定義自己的函數(shù)來準(zhǔn)確地實(shí)現(xiàn)想要的功能
- drop_last:告訴如何處理數(shù)據(jù)集長度除于batch_size余下的數(shù)據(jù)。True就拋棄,否則保留
總結(jié)
到此這篇關(guān)于Pytorch使用技巧之Dataloader中的collate_fn參數(shù)的文章就介紹到這了,更多相關(guān)Dataloader中的collate_fn參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python模塊Typing.overload的使用場(chǎng)景分析
在 Python 中,typing.overload 是一個(gè)用于定義函數(shù)重載的裝飾器,函數(shù)重載是指在一個(gè)類中可以定義多個(gè)相同名字但參數(shù)不同的函數(shù),使得在調(diào)用函數(shù)時(shí)可以根據(jù)參數(shù)的不同選擇不同的函數(shù)執(zhí)行,這篇文章主要介紹了Python模塊Typing.overload的使用,需要的朋友可以參考下2024-02-02
Python實(shí)現(xiàn)生命游戲的示例代碼(tkinter版)
生命游戲是由劍橋大學(xué)約翰·何頓·康威設(shè)計(jì)的計(jì)算機(jī)程序,一時(shí)吸引了各行各業(yè)一大批人的興趣。本文將用Python實(shí)現(xiàn)這一游戲,感興趣的可以嘗試一下2022-08-08
Pytorch-mlu?實(shí)現(xiàn)添加逐層算子方法詳解
本文主要分享了在寒武紀(jì)設(shè)備上?pytorch-mlu?中添加逐層算子的方法教程,代碼具有一定學(xué)習(xí)價(jià)值,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11
Python編程應(yīng)用設(shè)計(jì)原則詳解
什么是好用的代碼呢?其實(shí)就是代碼質(zhì)量比較高,如何評(píng)價(jià)代碼質(zhì)量的高低呢?最常用的、最重要的評(píng)價(jià)標(biāo)準(zhǔn),就是代碼的可維護(hù)性、可讀性、可擴(kuò)展性、靈活性、簡潔性、可復(fù)用性、可測(cè)試性2021-09-09
python實(shí)現(xiàn)將兩個(gè)文件夾合并至另一個(gè)文件夾(制作數(shù)據(jù)集)
這篇文章主要介紹了python實(shí)現(xiàn)將兩個(gè)文件夾合并至另一個(gè)文件夾(制作數(shù)據(jù)集),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04
Python實(shí)現(xiàn)的根據(jù)IP地址計(jì)算子網(wǎng)掩碼位數(shù)功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)的根據(jù)IP地址計(jì)算子網(wǎng)掩碼位數(shù)功能,涉及Python數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2018-05-05

