python - PyTorch DataLoader:每次调用时都遍历数据的子集而不是整个数据
问题描述
假设我有一个火炬dataloader = DataLoader(...)
对象。每当我调用函数时,我都不想遍历整个数据集for data, label in dataloader:
,所以目前我使用:
dataloader = DataLoader(...)
iter_dataloader = iter(dataloader)
batch = iter_dataloader.next() # Set the first batch
def train_batch():
data, label = batch
prediction = model(data)
# Do fancy things here
try:
batch = iter_dataloader.next() # Load the next batch
except:
iter_dataloader = iter(dataloader) # if the iterator object reaches the end, reset the dataloader
batch = iter_dataloader.next()
for _ in range(N):
train_batch() # This function is called multiple times
对于 的每次调用train_batch()
,我从数据集中获取一个批次,训练模型,然后加载下一个批次。如果没有剩余批次,我将重置 DataLoader 对象。
现在我的问题:
- 有没有办法让代码更清晰?也就是说,我不想使用
iter
andnext
方法。每次我调用它时,它都会从中自动采样一批,并在到达末尾时自动重置。我听说过Sampler
,但我没有使用它。 - 上面的扩展:代替批次,我可以使用
K
批次或1/K
我正在使用的数据集大小吗? - 我想要三种抽样方法:(1)按顺序抽样批次(无随机播放),(2)随机抽样(有和没有替换 - 随机抽样),以及(3)从中抽样,使标签相等。有没有办法做到这一点?
解决方案
推荐阅读
- python - 打印 numpy 数组
- c++ - 在 C++ 中隐藏键盘记录器的控制台窗口
- angular - 可观察,异步和其他
- forms - 为什么此复选框上的标签“容器”,不允许文本与复选框本身一起检查(以打开和关闭复选框)?
- ios - 如何使用prepareForSegue(Swift 4,Xcode 9)将UIButton的标签(一个Int)传递给其他ViewController
- angular - 由于模块 http 和 https,EventSource 无法在 Angular 6 中工作
- go - 没有嵌套初始化的golang字段继承
- c++ - DLL 共享数据的推荐方式是什么?
- swift - 使用 RxSwift 更改序列的 Observable 内的对象的值
- reactjs - React Router 不断渲染错误的页面