speechbrain.dataio.iterators 模块
Webdataset 兼容的迭代器
- 作者
Aku Rouhe 2021
摘要
类
长度的数据类 |
|
比例的数据类。 |
函数
从排序缓冲区生成批次 |
|
dynamic_bucketed_batch 的随机中心采样器函数 |
|
确定批次中有多少是填充。 |
|
确定批次有多长 (含填充) |
参考
- speechbrain.dataio.iterators.indices_around_random_pivot(databuffer, target_batch_numel, max_batch_size=None, max_batch_numel=None, max_padding_ratio=0.2, randint_generator=<bound method Random.randint of <random.Random object>>)[source]
dynamic_bucketed_batch 的随机中心采样器函数
在排序缓冲区中围绕随机中心索引创建批次
这适用于假定为排序顺序的数据缓冲区。随机选择一个索引。这开始了一个索引窗口:最初,只包含随机选择的中心索引。索引窗口一次增长一个索引,选择窗口右侧或左侧的索引,选择会使填充比例增加最少的索引,并确保批次不会超过最大批次长度和最大填充比例。
- 参数:
databuffer (list) – LengthItems 的排序列表
target_batch_numel (int) – 目标总批次长度(含填充),简单计算为批次大小 * 最长示例的长度。此函数旨在在收集到的长度超过此值时立即返回批次。如果先遇到其他限制,则可能无法满足此目标。
max_batch_size (None, int) – 批次中包含的最大示例数,或 None 表示不按示例数限制。
max_batch_numel (None, int) – 最大总批次长度(含填充),简单计算为批次大小 * 最长示例的长度。
max_padding_ratio (float) – 每个批次最多可以用于填充的比例。
randint_generator (generator) – 提供一个生成器以获得可重现的结果。
- 返回:
indices – 连续索引列表。
- 返回类型:
- speechbrain.dataio.iterators.dynamic_bucketed_batch(data, len_key=None, len_fn=<built-in function len>, min_sample_len=None, max_sample_len=None, buffersize=1024, collate_fn=<class 'speechbrain.dataio.batch.PaddedBatch'>, sampler_fn=<function indices_around_random_pivot>, sampler_kwargs={}, drop_end=False)[source]
从排序缓冲区生成批次
此函数维护传入样本的排序缓冲区。可以根据最小/最大长度过滤样本。使用外部采样器为每个批次选择样本,这允许使用不同的动态批处理算法。
- 参数:
data (iterable) – 可迭代的样本源,例如 IterableDataset。
len_key (str, None) – 用于在样本字典中获取样本长度的键,如果不需要使用键则为 None。
len_fn (callable) – 如果 len_key 不是 None,则使用 sample[len_key] 调用,否则使用 sample。需要返回样本长度作为整数。
min_sample_len (int, None) – 丢弃长度小于此值的样本。如果为 None,则不应用最小长度限制。
max_sample_len (int, None) – 丢弃长度大于此值的样本。如果为 None,则不应用最大长度限制。
buffersize (int) – 内部排序缓冲区的大小。在生成一批样本之前,缓冲区总是被填满。
collate_fn (callable) – 使用样本列表调用。这应该返回一个批次。默认情况下,使用 SpeechBrain PaddedBatch 类,它适用于类似字典的样本,并对任何张量进行填充。
sampler_fn (callable) – 使用排序后的数据缓冲区调用。需要返回构成下一个批次的索引列表。默认使用
indices_around_random_pivot
sampler_kwargs (dict) – 关键字参数,传递给 sampler_fn。
drop_end (bool) – 数据流耗尽后,是应该继续生成批次直到数据缓冲区也耗尽,还是应该丢弃缓冲区中剩余的数据。如果没有新样本,最后的批次可能处理效率不高。注意:您可以在
webdataset
IterableDatasets 上使用.repeat
以确保始终有新样本,然后使用speechbrain.dataio.dataloader.LoopedLoader
设置名义上的 epoch 长度。
- 生成:
批次