gpt4 book ai didi

python - tf.Data.Dataset - 在每个 Epoch 上,仅使用完整数据集的子样本进行训练

转载 作者:行者123 更新时间:2023-12-01 07:03:52 24 4
gpt4 key购买 nike

我有一个图像数据集,其中正样本和负样本(更多的负样本)存在很大的不平衡。我想创建一个 tf.data.Dataset,其中每个时期都会使用所有正样本进行训练,但仅使用 (ratio * len(positive) ) 负样本进行训练。

我目前正在使用从 keras.util.Sequence 继承的数据生成器来实现此目的,并且使用此子采样策略的性能比对所有数据进行训练要好得多。

但是阅读数据集上的文档,我似乎找不到办法做到这一点,这可能吗?

在我现有的数据生成器中,我正在这样做:

# List if indicies of the positive and negative samples
positives = np.where(self.labels == 1)[0]
negatives = np.where(self.labels == 0)[0]
# How many of the negatives do we want to use?
n_negatives = np.clip(int(len(positives) * self.config.DATASET_NEGSUBSAMPLE_RATIO), 1, len(negatives))
# Choose random negatives
subsampled_negatives = np.random.choice(negatives, n_negatives, replace=False)
# Create the incidies array from the positive and subsamples negative indicies
self.indexes = np.concatenate((positives, subsampled_negatives))
# Shuffle them together
np.random.shuffle(self.indexes)

最佳答案

positivesnegatives定义如问题中所示。

positives = [(0,1),(1,1),(2,1),(3,1),(4,1)]
negatives = [(10,0),(11,0),(12,0),(13,0),(14,0),(15,0),(16,0)]

NEGATIVE_SAMPLES = 3

pos_ds = tf.data.Dataset.from_tensor_slices(positives)
neg_ds = tf.data.Dataset.from_tensor_slices(negatives).shuffle(1000)

ds = pos_ds.concatenate(neg_ds.take(NEGATIVE_SAMPLES)).shuffle(1000)

els = [v.numpy().tolist() for v in list(ds)]

打印els对于示例执行给出:

[[0, 1], [4, 1], [12, 0], [16, 0], [1, 1], [10, 0], [3, 1], [2, 1]]

注意:您可能需要在 ds 末尾试验随机播放的缓冲区大小。定义。

关于python - tf.Data.Dataset - 在每个 Epoch 上,仅使用完整数据集的子样本进行训练,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58520594/

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