Пусть z — комплексная переменная, C(z) — ее сопряжение. В теории комплексного анализа производная C(z) по z не существует. Но в tessorflow мы можем вычислить dC(z)/dz и получить результат 1. Вот пример:
x = tf.placeholder('complex64',(2,2))
y = tf.reduce_sum(tf.conj(x))
z = tf.gradients(y,x)
sess = tf.Session()
X = np.random.rand(2,2)+1.j*np.random.rand(2,2)
X = X.astype('complex64')
Z = sess.run(z,{x:X})[0]
Ввод X равен
[[0.17014372+0.71475762j 0.57455420+0.00144318j]
[0.57871044+0.61303568j 0.48074263+0.7623235j ]]
и результат Z равен
[[1.-0.j 1.-0.j]
[1.-0.j 1.-0.j]]
Я не понимаю, почему для градиента установлено значение 1? И я хочу знать, как тензорный поток вообще обрабатывает сложные градиенты.