gpt4 book ai didi

pytorch - 在 pytorch 中使用数据加载器进行替换采样

转载 作者:行者123 更新时间:2023-12-05 02:38:20 25 4
gpt4 key购买 nike

我有一个定义为以下格式的数据集:

class MyDataset(Dataset):
def __init__(self, N):
self.N = N
self.x = torch.rand(self.N, 10)
self.y = torch.randint(0, 3, (self.N,))

def __len__(self):
return self.N

def __getitem__(self, idx):
return self.x[idx], self.y[idx]

在训练期间,我想对 m 个训练样本进行批处理抽样,并进行替换;例如第一次迭代包括数据索引 [1, 5, 6],第二次迭代包括数据点 [12, 3, 5],依此类推。所以总迭代次数是一个输入,而不是N/m

有没有办法使用 dataloader 来处理这个问题?如果不是,除了

for i in range(iter):
x = np.random.choice(range(N), m, replace=True)

实现这个?

最佳答案

您可以使用 RandomSampler ,这是一个在数据集和数据加载器之间滑动的实用程序:

>>> ds = MyDataset(N)
>>> sampler = RandomSampler(ds, replacement=True, num_samples=M)

上面,sampler 将采样总共 M(如果 num_samples > len(ds),当然需要更换)。在您的示例中 M = iter*m

然后您可以初始化一个 DataLoader使用采样器:

>>> dl = DataLoader(ds, sampler=sampler, batch_size=2)

这是 N = 2M = 2*len(ds) = 4batch_size = 2 的可能结果:

>>> for x, y in dl:
... print(x, y)

tensor([[0.5541, 0.3596, 0.5180, 0.1511, 0.3523, 0.4001, 0.6977, 0.1218, 0.2458, 0.8735],
[0.0407, 0.2081, 0.5510, 0.2063, 0.1499, 0.1266, 0.1928, 0.0589, 0.2789, 0.3531]])
tensor([1, 0])

tensor([[0.5541, 0.3596, 0.5180, 0.1511, 0.3523, 0.4001, 0.6977, 0.1218, 0.2458, 0.8735],
[0.0431, 0.0452, 0.3286, 0.5139, 0.4620, 0.4468, 0.3490, 0.4226, 0.3930, 0.2227]])
tensor([1, 0])

tensor([[0.5541, 0.3596, 0.5180, 0.1511, 0.3523, 0.4001, 0.6977, 0.1218, 0.2458, 0.8735],
[0.5541, 0.3596, 0.5180, 0.1511, 0.3523, 0.4001, 0.6977, 0.1218, 0.2458, 0.8735]])
tensor([1, 1])

关于pytorch - 在 pytorch 中使用数据加载器进行替换采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69681459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com