Ich habe eine Kette von Standard-TensorFlow-Operationen, und ich muss einen benutzerdefinierten Farbverlauf für diese Kette als Ganzes angeben.Benutzerdefinierte Steigung für eine Kette von Ops
Angenommen, im folgenden Beispiel sind diese Operationen in einer einzigen Python-Funktion gruppiert: 'my_op'. Was ich versuche ist, einen benutzerdefinierten Farbverlauf für 'my_op' anzugeben. Ich habe mir RegisterGradient, gradient_override_map und tf.Graph.create_op angesehen, aber ich konnte kein einfaches Beispiel finden, wie man mit ihnen einen benutzerdefinierten Farbverlauf für eine Gruppe von Ops definiert, ohne die gesamte Operationskette in C++ umzuschreiben.
import numpy as np
import tensorflow as tf
n = 2
m = 3
x = np.random.normal(size=(1, n))
A = tf.Variable(tf.truncated_normal(shape=(n, m), dtype=tf.float32))
b = tf.Variable(tf.zeros(shape=(1, m), dtype=tf.float32))
def my_op(a):
return tf.add(tf.matmul(a, A), b)
x_placeholder = tf.placeholder(tf.float32,shape=[1, n])
t = my_op(tf.stop_gradient(x_placeholder))
grad = tf.gradients(t, [A])
sess = tf.Session()
sess.run(tf.initialize_all_variables())
result = sess.run(grad, feed_dict={x_placeholder: x})
print(result)
sess.close()
Vielleicht Beispiel in [testFunctionGradientsWithGradFunc] (https://github.com/tensorflow/tensorflow/blob/73ced9d797056c7e67a06ed2098dd809d85ec44a/tensorflow/python/ops/gradients_test.py#L351) ist hilfreich –
Dank @Yaroslav, aber ich bin nicht sicher, dass ich es vollständig verstehe. Soll ich my_op mit Funktion.Defunc irgendwie dekorieren? Würdest du so freundlich sein, eine Antwort hinzuzufügen und das einfache Beispiel zu bearbeiten, das ich erstellt habe? – njk