PyTorch替代tf.data.experimental.sample_from_datasets

德克

假设我有两个数据集,其中一个数据集包含100个项目,而第二个数据集包含5000个项目。

现在,我希望在训练过程中,我的模型能从数据集中看到的数据与从数据集中得到的数据一样多。

在Tensorflow中我可以这样做:

dataset = tf.data.experimental.sample_from_datasets(
    [dataset_one, dataset_two], weights=[50,1], seed=None
)

在PyTorch中是否有替代方法可以做到这一点?

我认为通过创建自定义数据集来实现这一点不太困难(不起作用的示例)

from torch.utils.data import Dataset

class SampleDataset(Dataset):
    def __init__(self, datasets, weights):
        self.datasets = datasets
        self.weights = weights

    def __len__(self):
        return sum([len(dataset) for dataset in self.datasets])

    def __getitem__(self, idx):
        # sample a random number and based on that sample an item
        
        return self.datasets[dataset_idx][sample_idx]

但是,这似乎很普遍。已经有类似的东西了吗?

伊万

我认为PyTorch中没有直接的等效项。

但是,有一个名为的函数,该函数torch.utils.data.WeightedRandomSampler根据概率列表对索引进行采样。您可以将其与torch.data.utils.ConcatDatasettorch.utils.data.DataLoadersampler选项结合使用

我将给出一个包含两个数据集的示例:SetA具有500个元素,SetB而只有10元素

首先,您可以使用以下命令创建所有数据集的串联ConcaDataset

ds = ConcatDataset([SetA(), SetB()])

然后,我们需要对其进行采样。问题是,您不能WeightedRandomSampler [50, 1]像Tensorflow中那样仅仅给出解决方法是,创建一个概率列表,其长度与总数据集的大小相同。

此示例的相应概率列表为:

dist = np.array([1/51]*500 + [50/51]*10)

本质上,前500个索引(即“指向”的索引SetA被选择的概率为1/51,而随后的10个索引(即中的索引SetB被选择的概率为50/51(即由于中的元素较少SetB,因此进行了采样。这是理想的结果!)

我们可以从该分布创建一个采样器:

WeightedRandomSampler(dist, 10)

其中10是采样元素的数量。我将放置最小数据集的大小,否则您可能会在同一时期多次遍历相同的数据点...

最后,我们只需使用数据集和采样器实例化数据加载器:

dl = DataLoader(ds, sampler=sampler)

总结一下:

ds = ConcatDataset([SetA(), SetB()])
dist = np.array([1/51]*500 + [50/51]*10)
sampler = WeightedRandomSampler(dist, 10)
dl = DataLoader(ds, sampler=sampler)

编辑,以获取任意数量的数据集:

sets = [SetA(), SetB(), SetC()]
ds = ConcatDataset(sets)

dist = np.concatenate([[(len(ds) - len(s))/len(ds)]*len(s) for s in sets])
sampler = WeightedRandomSampler(weights=dist, num_samplesmin([len(s) for s in sets])
dl = DataLoader(ds, sampler=sampler)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Keras顺序模型中使用tf.data.experimental.CsvDataset

来自分类Dev

在Keras顺序模型中使用tf.data.experimental.CsvDataset

来自分类Dev

tf.data.experimental.make_csv_dataset:ValueError:提供的“ label_name”必须是以下列之一

来自分类Dev

octave 3d plot with mesh out of experimental data

来自分类Dev

在 tf.data.Datasets.from_generator 中将多个参数传递给 Generator

来自分类Dev

Colab + TPU不支持TF 2.3.0 tf.keras.layers.experimental.preprocessing

来自分类Dev

为什么logical_gpus = tf.config.experimental.list_logical_devices('GPU')导致一个空列表?

来自分类Dev

“使用strategy.scope():”或“使用tf.distribute.experimental.TPUStrategy(tpu).scope():”对创建NN有什么作用?

来自分类Dev

如何脱离std :: experimental :: optional?

来自分类Dev

tf.floor的替代方案

来自分类Dev

是否需要在XF 4.6版之前设置“ CarouselView_Experimental”,“ SwipeView_Experimental”,“ IndicatorView_Experimental”?

来自分类Dev

constexpr函数内部的std :: experimental :: optional

来自分类Dev

std :: experimental :: source_location如何实现?

来自分类Dev

使用std :: experimental :: optional来实现列表

来自分类Dev

形状在tf.data.Dataset.from_tensor_slices的最后记录中不兼容

来自分类Dev

Tensorflow:如何从CPU tf.data.Dataset(from_generator)预取GPU上的数据

来自分类Dev

如何在tf.data.Dataset.from_generator中保留字典键?

来自分类常见问题

R data.table-替代lapply?

来自分类Dev

Data.Vector.dropWhile的高效替代方案

来自分类Dev

在data.table中替代ifelse

来自分类Dev

R data.table-替代lapply?

来自分类Dev

替代(m)获取data.table函数

来自分类Dev

data.table 中 dcast 的替代方法?

来自分类Dev

ORA-00907:missing right parenthesis when taking sample from the data

来自分类Dev

tf.data API 读取 TFRecord 文件

来自分类Dev

为什么“ tf.data.Dataset.from_tensor_slices”在输出中打印图像的所有路径?

来自分类Dev

ValueError:使用tf.data.Dataset.from_tensor_slices时无法将非矩形Python序列转换为Tensor

来自分类Dev

Laravel DB Seeds - Test Data v Sample Data

来自分类Dev

lang不适用于std :: experimental :: optional

Related 相关文章

  1. 1

    在Keras顺序模型中使用tf.data.experimental.CsvDataset

  2. 2

    在Keras顺序模型中使用tf.data.experimental.CsvDataset

  3. 3

    tf.data.experimental.make_csv_dataset:ValueError:提供的“ label_name”必须是以下列之一

  4. 4

    octave 3d plot with mesh out of experimental data

  5. 5

    在 tf.data.Datasets.from_generator 中将多个参数传递给 Generator

  6. 6

    Colab + TPU不支持TF 2.3.0 tf.keras.layers.experimental.preprocessing

  7. 7

    为什么logical_gpus = tf.config.experimental.list_logical_devices('GPU')导致一个空列表?

  8. 8

    “使用strategy.scope():”或“使用tf.distribute.experimental.TPUStrategy(tpu).scope():”对创建NN有什么作用?

  9. 9

    如何脱离std :: experimental :: optional?

  10. 10

    tf.floor的替代方案

  11. 11

    是否需要在XF 4.6版之前设置“ CarouselView_Experimental”,“ SwipeView_Experimental”,“ IndicatorView_Experimental”?

  12. 12

    constexpr函数内部的std :: experimental :: optional

  13. 13

    std :: experimental :: source_location如何实现?

  14. 14

    使用std :: experimental :: optional来实现列表

  15. 15

    形状在tf.data.Dataset.from_tensor_slices的最后记录中不兼容

  16. 16

    Tensorflow:如何从CPU tf.data.Dataset(from_generator)预取GPU上的数据

  17. 17

    如何在tf.data.Dataset.from_generator中保留字典键?

  18. 18

    R data.table-替代lapply?

  19. 19

    Data.Vector.dropWhile的高效替代方案

  20. 20

    在data.table中替代ifelse

  21. 21

    R data.table-替代lapply?

  22. 22

    替代(m)获取data.table函数

  23. 23

    data.table 中 dcast 的替代方法?

  24. 24

    ORA-00907:missing right parenthesis when taking sample from the data

  25. 25

    tf.data API 读取 TFRecord 文件

  26. 26

    为什么“ tf.data.Dataset.from_tensor_slices”在输出中打印图像的所有路径?

  27. 27

    ValueError:使用tf.data.Dataset.from_tensor_slices时无法将非矩形Python序列转换为Tensor

  28. 28

    Laravel DB Seeds - Test Data v Sample Data

  29. 29

    lang不适用于std :: experimental :: optional

热门标签

归档