数据扩充:需要扩充多少比例的训练数据集?

Data Augmentation: What proportion of training dataset needs to be augmented?

我目前正在处理一个演讲class化问题。我在每个 class 中有 1000 个音频文件,并且有 7 个这样的 classes。我需要增加数据以获得更高的准确性。我正在使用 librosa 库进行数据扩充。对于每个音频文件,我都使用以下代码。

fbank_train = []
labels_train = []
for wav in x_train_one[:len(x_train_one)]:
    samples, sample_rate = librosa.load(wav, sr=16000)
    if (len(samples)) == 16000:
        label = wav.split('/')[6]
        fbank = logfbank(samples, sample_rate, nfilt=16)
        fbank_train.append(fbank)
        labels_train.append(label)
        y_shifted = librosa.effects.pitch_shift(samples, sample_rate, n_steps=4, bins_per_octave=24)
        fbank_y_shifted = logfbank(y_shifted, sample_rate, nfilt=16)
        fbank_train.append(fbank_y_shifted)
        labels_train.append(label)
        change_speed = librosa.effects.time_stretch(samples, rate=0.75)
        if(len(change_speed)>=16000):
            change_speed = change_speed[:16000]
            fbank_change_speed = logfbank(change_speed, sample_rate, nfilt=16)
            fbank_train.append(fbank_change_speed)
            labels_train.append(label)
        change_speedp = librosa.effects.time_stretch(samples, rate=1.25)
        if(len(change_speedp)<=16000):
            change_speedp = np.pad(change_speedp, (0, max(0, 16000 - len(change_speedp))), "constant")
            fbank_change_speedp = logfbank(change_speedp, sample_rate, nfilt=16)
            fbank_train.append(fbank_change_speedp)
            labels_train.append(label)

也就是说,我正在增强每个音频文件(变调和时移)。我想知道,这是增加训练数据集的正确方法吗? 如果不是,需要扩充的音频文件比例是多少?

最常见的增强方法是对整个数据集进行增强,每个样本都有随机机会,或者没有。

同样在大多数情况下,扩充是在运行时期间完成的。

例如,您的案例的伪代码可能如下所示:

for e in epochs:
    reshuffle_training_set
    for x, y in training_set:
        if np.random.random() > 0.5:
            x = randomly_shift_pitch(x)
        if np.random.random() > 0.5:
            x = randomly_shift_time(x)
        model.fit(x, y)

这意味着每张图片有 25% 的机会完全没有被增强,有 25% 的机会只被时移,有 25% 的机会只被音高移动,还有 25% 的机会被增强时间和音调都发生了变化。

在下一个 epoch 中,使用上述策略再次增强同一图像。如果你通过多个 epoch 训练你的模型,每张图像将通过每个增强组合(很有可能),因此模型将从它们中学习。

此外,如果每个移位都是随机完成的,即使一个样本两次通过同一个增强器,也不会产生相同的扰动样本。

在运行时增强图像而不是事先执行完整增强的一个好处是,如果您想要相同的结果,您需要创建多个新数据集(即一些时移数据集、音高移动数据集)一个和两者的组合)并在组合的大型数据集上训练模型。