Я работаю с MLP, написанным очень просто с Keras. Эта сеть предсказывает условия ковариационной матрицы, которая затем используется в пользовательских потерях. Когда матрица просто диагональ, я могу использовать простые приемы, чтобы заставить вещи работать. Однако, когда матрица заполнена (это ковариационная матрица, поэтому она полна и симметрия c), у меня возникают следующие проблемы:
- Как вывести полная, симметричная c матрица из моего MLP? Я хочу вывести только верхнюю три angular часть матрицы, а не полную. Я пытался использовать трюки, используя
reshape
, но безрезультатно; - Как я могу выполнять операции линейной алгебры в моей произвольной потере? Трюки, используемые для диагональной матрицы, больше не работают.
На данный момент моя потеря выглядит так:
def cma_sig_loss(self, adv, mu):
def loss(y_true, y_pred):
var = y_pred
log_var = tk.backend.log(var)
loss_sig = 0.5*tk.backend.square(y_true-mu)/var + 0.5*log_var
loss_cma = tk.backend.mean(adv*loss_sig)
return loss_cma
return loss
Я знаю, что это не правильное выражение многомерное нормальное распределение, но это реальная цель моего вопроса.
Заранее спасибо,