最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pytorch 實(shí)現(xiàn)多個(gè)Dataloader同時(shí)訓(xùn)練

 更新時(shí)間:2021年05月28日 17:13:46   作者:陳麒任  
這篇文章主要介紹了pytorch 實(shí)現(xiàn)多個(gè)Dataloader同時(shí)訓(xùn)練的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

看代碼吧~

在這里插入圖片描述

如果兩個(gè)dataloader的長(zhǎng)度不一樣,那就加個(gè):

from itertools import cycle

僅使用zip,迭代器將在長(zhǎng)度等于最小數(shù)據(jù)集的長(zhǎng)度時(shí)耗盡。 但是,使用cycle時(shí),我們將再次重復(fù)最小的數(shù)據(jù)集,除非迭代器查看最大數(shù)據(jù)集中的所有樣本。

在這里插入圖片描述

補(bǔ)充:pytorch技巧:自定義數(shù)據(jù)集 torch.utils.data.DataLoader 及Dataset的使用

本博客中有可直接運(yùn)行的例子,便于直觀的理解,在torch環(huán)境中運(yùn)行即可。

1. 數(shù)據(jù)傳遞機(jī)制

在 pytorch 中數(shù)據(jù)傳遞按一下順序:

1、創(chuàng)建 datasets ,也就是所需要讀取的數(shù)據(jù)集。

2、把 datasets 傳入DataLoader。

3、DataLoader迭代產(chǎn)生訓(xùn)練數(shù)據(jù)提供給模型。

2. torch.utils.data.Dataset

Pytorch提供兩種數(shù)據(jù)集:

Map式數(shù)據(jù)集 Iterable式數(shù)據(jù)集。其中Map式數(shù)據(jù)集繼承torch.utils.data.Dataset,Iterable式數(shù)據(jù)集繼承torch.utils.data.IterableDataset。

本文只介紹 Map式數(shù)據(jù)集。

一個(gè)Map式的數(shù)據(jù)集必須要重寫 __getitem__(self, index)、 __len__(self) 兩個(gè)方法,用來(lái)表示從索引到樣本的映射(Map)。 __getitem__(self, index)按索引映射到對(duì)應(yīng)的數(shù)據(jù), __len__(self)則會(huì)返回這個(gè)數(shù)據(jù)集的長(zhǎng)度。

基本格式如下:

 import torch.utils.data as data
class VOCDetection(data.Dataset):
    '''
    必須繼承data.Dataset類
    '''
    def __init__(self):
        '''
        在這里進(jìn)行初始化,一般是初始化文件路徑或文件列表
        '''
        pass
    def __getitem__(self, index):
        '''
        1. 按照index,讀取文件中對(duì)應(yīng)的數(shù)據(jù)  (讀取一個(gè)數(shù)據(jù)!?。?!我們常讀取的數(shù)據(jù)是圖片,一般我們送入模型的數(shù)據(jù)成批的,但在這里只是讀取一張圖片,成批后面會(huì)說(shuō)到)
        2. 對(duì)讀取到的數(shù)據(jù)進(jìn)行數(shù)據(jù)增強(qiáng) (數(shù)據(jù)增強(qiáng)是深度學(xué)習(xí)中經(jīng)常用到的,可以提高模型的泛化能力)
        3. 返回?cái)?shù)據(jù)對(duì) (一般我們要返回 圖片,對(duì)應(yīng)的標(biāo)簽) 在這里因?yàn)槲覜](méi)有寫完整的代碼,返回值用 0 代替
        '''
        return 0
    def __len__(self):
        '''
        返回?cái)?shù)據(jù)集的長(zhǎng)度
        '''
        return 0

可直接運(yùn)行的例子:

import torch.utils.data as data
import numpy as np
x = np.array(range(80)).reshape(8, 10) # 模擬輸入, 8個(gè)樣本,每個(gè)樣本長(zhǎng)度為10
y = np.array(range(8))  # 模擬對(duì)應(yīng)樣本的標(biāo)簽, 8個(gè)標(biāo)簽 
class Mydataset(data.Dataset):
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.idx = list()
        for item in x:
            self.idx.append(item)
        pass
    def __getitem__(self, index):
        input_data = self.idx[index] #可繼續(xù)進(jìn)行數(shù)據(jù)增強(qiáng),這里沒(méi)有進(jìn)行數(shù)據(jù)增強(qiáng)操作
        target = self.y[index]
        return input_data, target
    def __len__(self):
        return len(self.idx)
datasets = Mydataset(x, y)  # 初始化
print(datasets.__len__())  # 調(diào)用__len__() 返回?cái)?shù)據(jù)的長(zhǎng)度
for i in range(len(y)):
    input_data, target = datasets.__getitem__(i)  # 調(diào)用__getitem__(index) 返回讀取的數(shù)據(jù)對(duì)
    print('input_data%d =' % i, input_data)
    print('target%d = ' % i, target)

結(jié)果如下:

在這里插入圖片描述

3. torch.utils.data.DataLoader

PyTorch中數(shù)據(jù)讀取的一個(gè)重要接口是 torch.utils.data.DataLoader。

該接口主要用來(lái)將自定義的數(shù)據(jù)讀取接口的輸出或者PyTorch已有的數(shù)據(jù)讀取接口的輸入按照batch_size封裝成Tensor,后續(xù)只需要再包裝成Variable即可作為模型的輸入。

torch.utils.data.DataLoader(onject)的可用參數(shù)如下:

1.dataset(Dataset): 數(shù)據(jù)讀取接口,該輸出是torch.utils.data.Dataset類的對(duì)象(或者繼承自該類的自定義類的對(duì)象)。

2.batch_size (int, optional): 批訓(xùn)練數(shù)據(jù)量的大小,根據(jù)具體情況設(shè)置即可。一般為2的N次方(默認(rèn):1)

3.shuffle (bool, optional):是否打亂數(shù)據(jù),一般在訓(xùn)練數(shù)據(jù)中會(huì)采用。(默認(rèn):False)

4.sampler (Sampler, optional):從數(shù)據(jù)集中提取樣本的策略。如果指定,“shuffle”必須為false。我沒(méi)有用過(guò),不太了解。

5.batch_sampler (Sampler, optional):和batch_size、shuffle等參數(shù)互斥,一般用默認(rèn)。

6.num_workers:這個(gè)參數(shù)必須大于等于0,為0時(shí)默認(rèn)使用主線程讀取數(shù)據(jù),其他大于0的數(shù)表示通過(guò)多個(gè)進(jìn)程來(lái)讀取數(shù)據(jù),可以加快數(shù)據(jù)讀取速度,一般設(shè)置為2的N次方,且小于batch_size(默認(rèn):0)

7.collate_fn (callable, optional): 合并樣本清單以形成小批量。用來(lái)處理不同情況下的輸入dataset的封裝。

8.pin_memory (bool, optional):如果設(shè)置為True,那么data loader將會(huì)在返回它們之前,將tensors拷貝到CUDA中的固定內(nèi)存中.

9.drop_last (bool, optional): 如果數(shù)據(jù)集大小不能被批大小整除,則設(shè)置為“true”以除去最后一個(gè)未完成的批。如果“false”那么最后一批將更小。(默認(rèn):false)

10.timeout(numeric, optional):設(shè)置數(shù)據(jù)讀取時(shí)間限制,超過(guò)這個(gè)時(shí)間還沒(méi)讀取到數(shù)據(jù)的話就會(huì)報(bào)錯(cuò)。(默認(rèn):0)

11.worker_init_fn (callable, optional): 每個(gè)worker初始化函數(shù)(默認(rèn):None)

可直接運(yùn)行的例子:

import torch.utils.data as data
import numpy as np
x = np.array(range(80)).reshape(8, 10) # 模擬輸入, 8個(gè)樣本,每個(gè)樣本長(zhǎng)度為10
y = np.array(range(8))  # 模擬對(duì)應(yīng)樣本的標(biāo)簽, 8個(gè)標(biāo)簽
class Mydataset(data.Dataset):
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.idx = list()
        for item in x:
            self.idx.append(item)
        pass
    def __getitem__(self, index):
        input_data = self.idx[index]
        target = self.y[index]
        return input_data, target
    def __len__(self):
        return len(self.idx)
if __name__ ==('__main__'):
    datasets = Mydataset(x, y)  # 初始化
    dataloader = data.DataLoader(datasets, batch_size=4, num_workers=2) 
    for i, (input_data, target) in enumerate(dataloader):
        print('input_data%d' % i, input_data)
        print('target%d' % i, target)

結(jié)果如下:(注意看類別,DataLoader把數(shù)據(jù)封裝為Tensor)

在這里插入圖片描述

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Keras模型轉(zhuǎn)成tensorflow的.pb操作

    Keras模型轉(zhuǎn)成tensorflow的.pb操作

    這篇文章主要介紹了Keras模型轉(zhuǎn)成tensorflow的.pb操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • Python中dict支持多個(gè)key的方法新家

    Python中dict支持多個(gè)key的方法新家

    在Python中,字典(dict)是一種非常強(qiáng)大的數(shù)據(jù)結(jié)構(gòu),它允許我們通過(guò)鍵(key)來(lái)存儲(chǔ)和檢索值(value),本文將展示處理包含多個(gè)鍵的字典的方法,希望對(duì)大家有所幫助
    2024-11-11
  • python列表中刪除重復(fù)元素的三種方法

    python列表中刪除重復(fù)元素的三種方法

    本文主要介紹了python列表中刪除重復(fù)元素的三種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • 淺談Python 中的復(fù)數(shù)問(wèn)題

    淺談Python 中的復(fù)數(shù)問(wèn)題

    這篇文章主要介紹了在Python 中的復(fù)數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • Python這樣操作能存儲(chǔ)100多萬(wàn)行的xlsx文件

    Python這樣操作能存儲(chǔ)100多萬(wàn)行的xlsx文件

    這篇文章主要介紹了Python這樣操作能存儲(chǔ)100多萬(wàn)行的xlsx文件的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • python圖像處理入門(一)

    python圖像處理入門(一)

    這篇文章主要介紹了python圖像處理入門,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Python3.x和Python2.x的區(qū)別介紹

    Python3.x和Python2.x的區(qū)別介紹

    python3.x與python2.x區(qū)別很大,這里搜索了一些相關(guān)內(nèi)容,記錄在此,供自己學(xué)習(xí)參考,有需要的朋友不妨看看
    2013-02-02
  • 一篇文章講解用VScode寫Python怎么運(yùn)行

    一篇文章講解用VScode寫Python怎么運(yùn)行

    這篇文章主要介紹了如何在Visual?Studio?Code(VSCode)中編寫和運(yùn)行Python代碼,包括安裝VSCode、安裝Python插件、配置Python環(huán)境、創(chuàng)建和運(yùn)行Python文件、調(diào)試Python代碼、代碼格式化、代碼片段、Git集成以及單元測(cè)試等,需要的朋友可以參考下
    2024-12-12
  • python繪制多個(gè)曲線的折線圖

    python繪制多個(gè)曲線的折線圖

    這篇文章主要為大家詳細(xì)介紹了python繪制多個(gè)曲線的折線圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Python用zip函數(shù)同時(shí)遍歷多個(gè)迭代器示例詳解

    Python用zip函數(shù)同時(shí)遍歷多個(gè)迭代器示例詳解

    這篇文章主要給大家進(jìn)行介紹了Python如何用zip函數(shù)同時(shí)遍歷多個(gè)迭代器,文中給出了示例以及原理和注意事項(xiàng),相信會(huì)對(duì)大家的理解和學(xué)習(xí)很有幫助,有需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11

最新評(píng)論

徐水县| 兴国县| 富阳市| 日土县| 都匀市| 南丰县| 东安县| 区。| 兴国县| 鲜城| 琼结县| 林芝县| 安丘市| 瓦房店市| 班戈县| 宣恩县| 龙口市| 江永县| 沾益县| 新密市| 南和县| 青神县| 常山县| 宽城| 丰顺县| 铁岭市| 扶风县| 肃南| 石门县| 班戈县| 鄢陵县| 长治市| 凤凰县| 华池县| 巩留县| 清苑县| 通城县| 金门县| 翁牛特旗| 桂林市| 淮南市|