Tensorflow, Keras: How to create a trainable variable that only update in specific positions?
You have two different tools to address this problem.
- You can create the variables you need and rearrange them into the desired form.
- You can create more variables than you need then discard some to reach the desired form.
Both approach are not exclusive and you could you a mix of successives steps of type #1 and #2.
For example, for your first example (diagonal matrix), we can use approach #1.
w = tf.Variable(tf.zeros(n))
A = tf.diag(w) # creates a diagonal matrix with elements of w
For your second, more complex example, we could use approach #2.
A = tf.Variable(tf.zeros((n, n)))
A = tf.matrix_band_part(A, 1, 1) # keep only the central band of width 3
A = tf.matrix_set_diag(A, tf.ones(n)) # set diagonal to 1