Как создать PyTorch DataLoader с нуля?

#python #iterator #pytorch #dataloader

#python #итератор #pytorch #загрузчик данных

Вопрос:

Возможно ли воссоздать простую версию PyTorch DataLoader с нуля? Класс должен иметь возможность возвращать текущий пакет в зависимости от размера пакета.

Например, приведенный ниже код позволяет мне возвращать только один пример за раз

 X = np.array([[1,2],[3,4],[5,6],[6,7]])

class DataLoader:
    def __init__(self, X, b_size):
        self.X = X
        self.b_size = b_size
    
    def __len__(self):
        return len(self.X)
    
    def __getitem__(self, index):
        return self.X[index]
  

Но чего я хочу добиться, так это того, что если я укажу b_size=2, он вернет:

 Iteration 0: [[1,2],[3,4]]
Iteration 1: [[5,6],[7,8]]
  

Возможно ли сделать что-то подобное в Python? Я не могу использовать класс DataLoader.

Ответ №1:

 X = np.array([[1,2],[3,4],[5,6],[6,7]])

class DataLoader:
    def __init__(self, X, b_size):
        self.X = X
        self.b_size = b_size
    
    def __len__(self):
        return len(self.X)//self.b_size
    
    def __getitem__(self, index):        
        return self.X[index*self.b_size:index*self.b_size self.b_size]

d = DataLoader(X, 2)
for i in range(len(d)):
  print (f"Iteration {i}: {d[i]}")
  

Вывод:

 Iteration 0: [[1 2]
 [3 4]]
Iteration 1: [[5 6]
 [6 7]]
  

Комментарии:

1. Это было так просто.. Спасибо.