ответ

2

Обычно с потерей, как, что вам нужно векторизации его, вместо того чтобы работать с колоннами:

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 

Для реализации нулевого ограничения на диагонали С наилучшим способом является добавление его к потерям с другой константой lambd2:

reg_loss2 = tf.trace(tf.square(C)) 
total_loss = total_loss + lambd2 * reg_loss2 
+0

Большое вам спасибо! Я думал об использовании tf.slice(), чтобы получить столбец матрицы, как вы думаете, это будет работать? Каков механизм tf.slice()? – xxx222

+0

Это также будет работать, так как градиент будет возвращаться к исходной переменной C (и X), но это было бы очень неэффективно –

+0

Получил это, спасибо большое. – xxx222

 Смежные вопросы

  • Нет связанных вопросов^_^