Зависит от вашего варианта использования. В приведенном ниже примере вы можете взять след внутреннего произведения матрицы реконструкции и входной матрицы (при условии, что имеет смысл рассматривать матрицу восстановления как вероятность). Затем отредактируйте свою пользовательскую функцию потерь, чтобы она возвращала это значение вместо (или в дополнение к) стандартной потери 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)
В случае ввода белка имеет смысл нормализовать для каждого столбца, потому что каждый столбец действительно может иметь только одно значение. В других случаях вы можете захотеть