Мне нужно использовать BatchSampler
в пределах pytorch DataLoader
вместо многократного вызова __getitem__
набора данных (удаленный набор данных, каждый запрос дорогой).
Я не могу понять, как использовать пакетный сэмплер с любым данным набором данных.
например,
class MyDataset(Dataset):
def __init__(self, remote_ddf, ):
self.ddf = remote_ddf
def __len__(self):
return len(self.ddf)
def __getitem__(self, idx):
return self.ddf[idx] --------> This is as expensive as a batch call
def get_batch(self, batch_idx):
return self.ddf[batch_idx]
my_loader = DataLoader(MyDataset(remote_ddf),
batch_sampler=BatchSampler(Sampler(), batch_size=3))
Вещь, которую я не понимаю, также не нашел ни одного примера в Интернете или в документации по факелам, как я могу использовать мою функцию get_batch
вместо функции __getitem__.
Редактировать: Следуя ответу Шимона Маске, это то, что я пытался, и все же, \_\_get_item__
получает по одному индексу за каждый вызов вместо списка размером batch_size
class Dataset(Dataset):
def __init__(self):
...
def __len__(self):
...
def __getitem__(self, batch_idx): ------> here I get only one index
return self.wiki_df.loc[batch_idx]
loader = DataLoader(
dataset=dataset,
batch_sampler=BatchSampler(
SequentialSampler(dataset), batch_size=self.hparams.batch_size, drop_last=False),
num_workers=self.hparams.num_data_workers,
)