Как можно добавить шум Лапласа к тензору в кератах? - PullRequest
0 голосов
/ 20 июня 2019

В настоящее время я пытаюсь научить нейронную сеть декодировать вход, на который был добавлен шум Лапласа (т.е. добавление центрированной случайной величины, которая следует распределению Лапласа). Для этого я бы хотел, чтобы в каждую тренировочную эпоху добавлялся к каждому биту входной лапласианский шум. Этот шум следует регенерировать в каждую тренировочную эпоху.

На данный момент я реализовал слой, который добавляет шум. Он работал легко для гауссовского шума, потому что в керасе есть включенный гауссов генератор. Для шума Лапласа, я пытался вещи: -создать массив с помощью функции random.laplace для numpy и преобразовать его в тензор. Это существенно замедляет тренировку, и поведение тренинга странно, поэтому я не уверен, что он делает то, что, как я думаю, должен делать. -Используйте функцию преобразования из равномерной переменной в переменную Лапласа, однако это может быть связано с числовыми проблемами (может вычислить журнал значений, близких к 0).

def laplace(x,sigma,batchsize):
    u=K.random_uniform((batchsize,n), minval=-0.5, maxval=0.5)
    return x - sigma*K.sign(u)*K.log(1-2*K.abs(u))

или

def laplace(x,sigma,batchsize):
    u=K.random_uniform((batchsize,n), minval=-0.5, maxval=0.5)
    return x+K.tf.convert_to_tensor(np.random.laplace(0,sigma,(batchsize,n)),dtype=K.tf.float32)

Я хотел бы знать, есть ли лучший способ для добавления шума Лапласа к тензору, регенерируемому в каждую эпоху, более легким в керасе / тензорном потоке.

Спасибо за любую идею!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...