2017-01-29 1 views

답변

21

예, 가능합니다. 직접 개체를 만들면됩니다.

import torch.utils.data as data_utils 

train = data_utils.TensorDataset(features, targets) 
train_loader = data_utils.DataLoader(train, batch_size=50, shuffle=True) 

featurestargets는 텐서이다. features은 2-D, 즉 각 행이 하나의 학습 샘플을 나타내는 행렬이어야하며 targets은 스칼라 또는 벡터 예측 여부에 따라 1-D 또는 2-D가 될 수 있습니다.

희망 하시겠습니까?


편집 : @의 사르 탁의 질문에 대한 응답

기본적으로 예. 그러나

assert data_tensor.size(0) == target_tensor.size(0) 

: 당신이 유형 TensorData의 객체를 만들 경우, 생성자는 (실제로 data_tensor라고) 기능 텐서의 첫 번째 치수와 (target_tensor이라고 함) 대상 텐서가 동일한 길이를 가지고 있는지 조사 이 데이터를 이후에 신경망에 공급하려면 조심해야합니다. 컨볼 루션 (convolution) 레이어는 당신과 같은 데이터에서 작동하지만 (저는 생각합니다) 모든 다른 유형의 레이어는 데이터가 매트릭스 형식으로 제공 될 것으로 기대합니다. 따라서 이와 같은 문제가 발생하면 메서드를 사용하여 4D 데이터 집합 (일종의 텐서로 지정, 예 : FloatTensor)을 행렬로 변환하는 것이 쉬운 해결책입니다. 당신의 5000xnxnx3 데이터 세트의 경우, 이것은 다음과 같을 것이다 :

2d_dataset = 4d_dataset.view(5000, -1) 

(. 값 -1 자동으로 두 번째 차원의 길이를 알아 내기 위해 PyTorch을 말한다)

+0

저는 3D 기능을 가지고 있습니다 : 이미지 용 2D와 컬러 채널 용 추가 차원. 5000xnxnx3으로 기능을 전달하면 여전히 작동합니까? 5000은 데이터 포인트의 수입니다. nxnx3은 이미지 크기입니다. – Sarthak

+0

기본적으로 예,하지만 내 대답의 편집을 확인하십시오. – pho7

+0

4d 데이터 집합을 뷰 문이 필요없는 기능으로 전달할 수 있습니다. – Sarthak

5

쉽게이 확장 될 할 수있는 data.Dataset 클래스를 . API에 따르면, 두 가지 기능, 즉 __getitem____len__을 구현하면됩니다.

그러면 API 및 @ pho7의 대답에 표시된대로 DataLoader로 데이터 세트를 래핑 할 수 있습니다.

ImageFolder 클래스가 참조라고 생각합니다. 코드 here을 참조하십시오.