Как мне реализовать функцию оптимизации в тензорном потоке?

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
Другие вопросы по тегам