Добавьте белый шум на данные пакета изображений во время тренировки - PullRequest
0 голосов
/ 11 февраля 2019

Я пробую модель без шума, цель - распечатать clean / add_noise / model_output каждой партии.

Я использую PyTorch DataLoader.Каждое изображение имеет shape = (256, 128) и набор batch_size = 10, поэтому каждая партия имеет размер (10, 256, 128).Я хотел бы распечатать первые данные каждой партии, т.е. batch_data[0]

Каждое изображение имеет shape = (256, 128)

Я написал функцию для добавления шума, как показано ниже:

def add_noise(data, bs, target_snr, noise_type):

    if noise_type == 'white':
        noise = acoustics.generator.white(bs*256*128).reshape(bs, 256, 128)

    if noise_type == 'pink':
        noise = acoustics.generator.pink(bs*256*128).reshape(bs, 256, 128)


    print ('data shape = ', data.shape)

    average = np.mean(data)
    std = np.std(noise)
    current_snr = average/std

    noise = noise * (current_snr/ target_snr)
    data = data + noise

    return data 

Тем не менее, он возвращает сообщение об ошибке, как показано ниже:

TypeError: mean() missing 3 required positional argument: "dim", "keepdim", "dtype"

Как мне с этим справиться?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

В качестве первого комментария под оригинальным постом.Данные являются тензором PyTorch, в то время как я использовал метод Numpy.Я попытался использовать torch.mean() & torch.std(), и это работает.

0 голосов
/ 11 февраля 2019

Какая у тебя форма data?Что это такое type(data)?
Вы передаете тензор DataLoader в функции Numpy?

Посмотрите документацию для функции mean() Numpy, которая такжесодержит несколько примеров.

Функция принимает в качестве входных данных массивоподобный объект (например, это может быть 2d матрица), поэтому среднее значение не сразу четко определено.Вам нужно вычислить среднее значение по строкам, столбцам или всем данным в матрице?Какой тип данных будет использоваться при расчете?

В первом случае вам нужно указать размер, который вы хотите выровнять в массиве.Во втором случае он должен работать из коробки с Numpy как «По умолчанию вычисляется среднее значение уплощенного массива» , но, поскольку вы работаете с PyTorch DataLoader, может потребоватьсяони должны быть определены.

Поскольку ваш average выглядит как число, что-то вроде этого должно работать

average = np.mean(data, axis=(0,1) keepdims=False)
...