Ich arbeite an einer DDPG-Implementierung, die die Berechnung von einem Netzwerk (unten:.) Gradienten in Bezug auf ein anderes Netzwerk (unten: actor
) Ausgabe erfordert. Mein Code macht bereits die Verwendung von Warteschlangen statt Feed dicts zum größten Teil, aber ich konnte nicht so für diesen spezifischen Teil tut noch:Tensorflow: tf.gradienten zwischen verschiedenen Pfaden des Diagramms
import tensorflow as tf
tf.reset_default_graph()
states = tf.placeholder(tf.float32, (None,))
actions = tf.placeholder(tf.float32, (None,))
actor = states * 1
critic = states * 1 + actions
grads_indirect = tf.gradients(critic, actions)
grads_direct = tf.gradients(critic, actor)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
act = sess.run(actor, {states: [1.]})
print(act) # -> [1.]
cri = sess.run(critic, {states: [1.], actions: [2.]})
print(cri) # -> [3.]
grad1 = sess.run(grads_indirect, {states: [1.], actions: act})
print(grad1) # -> [[1.]]
grad2 = sess.run(grads_direct, {states: [1.], actions: [2.]})
print(grad2) # -> TypeError: Fetch argument has invalid type 'NoneType'
grad1
hier berechnet die Steigungen w.r.t. zu den Einspeiseaktionen, die zuvor von der actor
berechnet wurden. grad2
sollte das gleiche tun, aber direkt innerhalb des Graphen ohne die Notwendigkeit, die Aktionen zurück in aber actor
direkt eingeben. Das Problem ist, dass grads_direct
ist None
:
print(grads_direct) # [None]
Wie kann ich das erreichen? Gibt es eine dedizierte "evaluiere diesen Tensor" -Operation, die ich nutzen könnte? Vielen Dank!