iterator - 如何通过小数据集进行采样以进行比数据大小更多的迭代?
问题描述
我有一个小数据集和一个大数据集,它们表示两个单独的类。我正在训练的网络是风格迁移,所以我需要每个班级的一张图像才能继续训练。但是,一旦较小的数据集用完,训练就会停止。如何保持从小数据集中随机抽样超出其大小?
我试过RandomSampler()
了,但没有用。这是我的小数据集代码:
sampler = RandomSampler(self)
dataloader = DataLoader(self, batch_size=26, shuffle=False, sampler=sampler)
while True:
for data in dataloader:
yield data
我也尝试过iterator.cycle
,但这也没有帮助。
loader = iter(cycle(self.dataset.gen(attribute_id, True)))
A, y_A = next(loader)
B, y_B = next(self.dataset.gen(attribute_id, False))
解决方案
你的想法RandomSampler
并不遥远。有一个采样器叫做SubsetRandomSampler
. 虽然一个子集通常小于整个集合,但情况并非如此。
假设您的较小数据集有A
条目,而您的第二个数据集有B
. 您可以定义您的索引:
indices = np.random.randint(0, A, B)
sampler = torch.utils.data.sampler.SubsetRandomSampler(indices)
这会在对较小数据集有效的范围内生成B
索引。
测试:
loader = torch.utils.data.DataLoader(set_A, batch_size=1, sampler=sampler)
print(len(loader)) # B
推荐阅读
- julia - 在脚本中定义时,Julia 函数不打印输出
- asp.net-core - 如何将 Asp.net core Identity 用户连接到 IdentityServer4 用户
- python - Python 谷歌表格格式
- node.js - 如何将 hbs 车把文件链接到 ejs 文件?错误 - “无法在视图目录中查找视图“employee/addOrEdit”...”
- javascript - 防止双击带有标签的复选框
- python - Python,在其他 .py 文件/NameError 中使用函数中的全局变量
- azure - 如何在代码授权流中检查从 Azure 获得的刷新令牌?
- python - 将嵌套列表转换为多个字典
- javascript - react-native 功能组件在哪里实现初始化代码
- javascript - React useEffect 不会阻止重新渲染