pytorch 여러 Dataloader 동시 훈련 실현

코드 보 세 요~
在这里插入图片描述
두 dataloader 의 길이 가 다 르 면 다음 을 추가 합 니 다.

from itertools import cycle
zip 만 사용 하면 교체 기 는 길이 가 최소 데이터 세트 길이 와 같 을 때 소 진 됩 니 다.단,cycle 을 사용 할 때,우 리 는 교체 기 가 최대 데이터 가 집 중 된 모든 샘플 을 보지 않 는 한 최소 데이터 세트 를 다시 반복 할 것 입 니 다.
在这里插入图片描述
추가:pytorch 기법:사용자 정의 데이터 세트 torch.utils.data.dataLoader 및 Dataset 사용
본 블 로그 에는 직접 실행 할 수 있 는 예 가 있어 직관 적 으로 이해 하기 쉽 고 torch 환경 에서 실행 하면 됩 니 다.
1.데이터 전달 메커니즘
pytorch 에서 데이터 전달 순서:
1.datasets,즉 읽 어야 할 데이터 세트 를 만 듭 니 다.
2.datasets 를 DataLoader 에 전송 합 니 다.
3.DataLoader 는 훈련 데 이 터 를 교체 하여 모델 에 제공 합 니 다.
2. torch.utils.data.Dataset
Pytorch 는 두 가지 데이터 세트 를 제공 합 니 다.
Map 식 데이터 세트 Iterable 식 데이터 세트.그 중에서 Map 식 데이터 세트 는 torch.utils.dataset,Iterable 식 데이터 세트 는 torch.utils.data.Iterable Dataset 를 계승 합 니 다.
본 고 는 맵 식 데이터 세트 만 소개 한다.
맵 식 데이터 세트 는 다시 써 야 합 니 다getitem__(self, index)、 __len__(self)두 가지 방법 으로 색인 에서 견본 까지 의 맵(Map)을 표시 합 니 다.getitem__(self,index)색인 에 따라 대응 하 는 데 이 터 를 매 핑 합 니 다.len__(self)는 이 데이터 세트 의 길 이 를 되 돌려 줍 니 다.
기본 형식 은 다음 과 같 습 니 다.

 import torch.utils.data as data
class VOCDetection(data.Dataset):
    '''
        data.Dataset 
    '''
    def __init__(self):
        '''
                ,               
        '''
        pass
    def __getitem__(self, index):
        '''
        1.   index,            (      !!!!           ,              ,            ,       )
        2.               (               ,           )
        3.       (          ,     )               ,     0   
        '''
        return 0
    def __len__(self):
        '''
                
        '''
        return 0
직접 실행 가능 한 예:

import torch.utils.data as data
import numpy as np
x = np.array(range(80)).reshape(8, 10) #     , 8   ,       10
y = np.array(range(8))  #          , 8    
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)
datasets = Mydataset(x, y)  #    
print(datasets.__len__())  #   __len__()        
for i in range(len(y)):
    input_data, target = datasets.__getitem__(i)  #   __getitem__(index)         
    print('input_data%d =' % i, input_data)
    print('target%d = ' % i, target)
결 과 는 다음 과 같다.
在这里插入图片描述
3. torch.utils.data.DataLoader
PyTorch 에서 데 이 터 를 읽 는 중요 한 인 터 페 이 스 는 torch.utils.data.dataLoader 입 니 다.
이 인 터 페 이 스 는 사용자 정의 데 이 터 를 인터페이스의 출력 을 읽 거나 PyTorch 에 있 는 데이터 읽 기 인터페이스의 입력 을 batch 에 따라 읽 는 데 사 용 됩 니 다.size 는 Tensor 로 포장 되 어 있 으 며,다음 에는 Variable 로 포장 하면 모델 로 입력 할 수 있 습 니 다.
torch.utils.data.dataLoader(onject)의 사용 가능 한 매개 변 수 는 다음 과 같 습 니 다.
1.dataset(Dataset):데이터 읽 기 인터페이스,이 출력 은 torch.utils.data.dataset 류 의 대상(또는 이러한 사용자 정의 클래스 의 대상 을 계승 합 니 다).
2.batch_size (int, optional):일괄 훈련 데이터 의 크기 는 구체 적 인 상황 에 따라 설정 하면 된다.보통 2 인 N 제곱(기본 값:1)
3.shuffle (bool, optional):데 이 터 를 흐 트 러 뜨리 는 지 여 부 는 보통 훈련 데이터 에서 사용한다.(기본 값:false)
4.sampler (Sampler, optional):데이터 에서 샘플 을 집중 적 으로 추출 하 는 전략.지정 하면"shuffle"은 false 여야 합 니 다.나 는 써 본 적 이 없어 서 잘 모른다.
5.batch_sampler (Sampler, optional):batchsize,shuffle 등 매개 변 수 는 서로 배척 하고 기본 값 을 사용 합 니 다.
6.num_workers:이 매개 변 수 는 0 보다 크 고 0 일 때 기본 값 으로 메 인 스 레 드 로 데 이 터 를 읽 어야 합 니 다.다른 0 이상 의 수 는 여러 프로 세 스 를 통 해 데 이 터 를 읽 을 수 있 고 데이터 읽 기 속 도 를 가속 화 할 수 있 습 니 다.보통 2 의 N 제곱 으로 설정 되 어 있 으 며 batch 보다 작 습 니 다.size(기본 값:0)
7.collate_fn (callable, optional):샘플 목록 을 합병 하여 소량 을 형성한다.서로 다른 상황 에서 입력 한 dataset 의 패 키 징 을 처리 합 니 다.
8.pin_memory (bool, optional):True 로 설정 하면 data loader 는 되 돌아 가기 전에 tensors 를 CUDA 의 고정 메모리 에 복사 합 니 다.
9.drop_last (bool, optional):데이터 세트 크기 가 일괄 크기 로 정리 되 지 않 으 면 마지막 미 완성 그룹 을 제거 하기 위해'true'로 설정 합 니 다.만약"false"라면 마지막 무 리 는 더욱 작 을 것 이다.기본 값:false)
10.timeout(numeric, optional):데이터 읽 기 시간 제한 을 설정 하고 이 시간 을 초과 하여 데 이 터 를 읽 지 못 하면 오류 가 발생 합 니 다.(기본 값:0)
11.worker_init_fn (callable, optional):워 커 마다 함수 초기 화(기본 값:None)
직접 실행 가능 한 예:

import torch.utils.data as data
import numpy as np
x = np.array(range(80)).reshape(8, 10) #     , 8   ,       10
y = np.array(range(8))  #          , 8   
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)
결 과 는 다음 과 같 습 니 다.(카 테 고리 에 주의 하 십시오.DataLoader 는 데 이 터 를 Tensor 로 밀봉 합 니 다)
在这里插入图片描述
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기