Как добавить шум с равномерным распределением во входные данные в Keras?

Мне нужно добавить шум квантования к моим входным данным. Я часто читаю, что такие шумы моделируются как шум с равномерным распределением.

У меня есть сеть кодирования / декодирования, реализованная с помощью Keras (входные данные - это необработанные данные временного ряда), в Keras есть слой, с помощью которого вы можете добавить гауссовский шум (слой GaussianNoise), могу ли я использовать этот слой для создания равномерного шума?

Если нет, могу ли я использовать другие реализованные слои?


person Farnaz    schedule 21.10.2019    source источник


Ответы (1)


Вы можете создать свой собственный слой как таковой,

import tensorflow as tf

class noiseLayer(tf.keras.layers.Layer):

    def __init__(self,mean,std):
        super(noiseLayer, self).__init__()
        self.mean = mean
        self.std  = std

    def call(self, input):

        mean = self.mean
        std  = self.std

        return input + tf.random.normal(tf.shape(input).numpy(), 
                                    mean = mean,
                                    stddev = std)

X = tf.ones([10,10,10]) * 100
Y = noiseLayer(mean = 0, std = 0.1)(X)

Этот код работает в последней версии Tensorflow 2.0.

person youngseok jeon    schedule 21.10.2019
comment
Я пытаюсь добавить пуассоновский шум к моему слою увеличения данных. Я определил класс аналогично приведенному выше, но когда я это сделаю: data_augmentation = keras.Sequential ([keras.layers.experimental.preprocessing.RandomFlip (), noiseLayer (mean = 1) (x)], name = 'DataAugm' ) Я получаю сообщение об ошибке: добавленный слой должен быть экземпляром класса Layer. Найдено: Tensor (noise_layer_7 / Identity: 0, shape = (None, 29, 29, 1), dtype = float32) Вы можете помочь? - person Beth Long; 03.07.2020
comment
попробуйте удалить (x), вы не должны запускать функцию в keras. - person youngseok jeon; 04.07.2020