Внедрение вариационного автоэнкодера в керас с вероятностью реконструкции - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь реализовать вариационный автоэнкодер в кератах и ​​использовать вероятность восстановления вместо ошибки реконструкции для обнаружения аномалий. В глубоком обучении 4j есть пример, и кто-то уже задавал этот вопрос здесь: Вариационный автоэнкодер и реконструкция Log Вероятность vs Ошибка реконструкции

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 31 октября 2018

Зависит от вашего варианта использования. В приведенном ниже примере вы можете взять след внутреннего произведения матрицы реконструкции и входной матрицы (при условии, что имеет смысл рассматривать матрицу восстановления как вероятность). Затем отредактируйте свою пользовательскую функцию потерь, чтобы она возвращала это значение вместо (или в дополнение к) стандартной потери VAE. Адаму все равно, что оптимизируется, однако, хорошие преимущества использования VAE, если вы не используете его потерю, могут исчезнуть. С здесь :

def compute_log_probability(one_hot_inp,pwm_output):
    prod_mat=np.matmul(one_hot_inp.T,pwm_output)
    log_prod_mat=np.log(prod_mat)
    sum_diag=np.trace(log_prod_mat)
    return sum_diag

output = x_decoded.reshape(dim1,dim2)
output = normalize(output,axis=0, norm='l1') #column-wise normalization in this case
prob=compute_log_probability(input,output)

В случае ввода белка имеет смысл нормализовать для каждого столбца, потому что каждый столбец действительно может иметь только одно значение. В других случаях вы можете захотеть

...