Как мне реализовать функцию оптимизации в тензорном потоке?
minΣ (|| xi-Xci || ^ 2 + λ|| ci ||),
St CII = 0,
где X - это матрица формы d * n, а C имеет форму n * n, xi и ci означает столбец X и C отдельно.
X известен здесь и на основе X мы хотим найти C.
1 ответ
Решение
Обычно с такой потерей вам нужно векторизовать ее, а не работать со столбцами:
loss = X - tf.matmul(X, C)
loss = tf.reduce_sum(tf.square(loss))
reg_loss = tf.reduce_sum(tf.square(C), 0) # L2 loss for each column
reg_loss = tf.reduce_sum(tf.sqrt(reg_loss))
total_loss = loss + lambd * reg_loss
Чтобы реализовать нулевое ограничение на диагонали C, лучше всего добавить его к потерям с другой константой. lambd2
:
reg_loss2 = tf.trace(tf.square(C))
total_loss = total_loss + lambd2 * reg_loss2