3 votes

Trouver les placeholders nécessaires dans un graphe Tensorflow

Dans Tensorflow, existe-t-il un moyen de trouver tous les tenseurs placeholder qui sont nécessaires pour évaluer un certain tenseur de sortie ? En d'autres termes, existe-t-il une fonction qui renverra tous les tenseurs (placeholder) qui doivent être introduits dans feed_dict quand sess.run(output_tensor) s'appelle ?

Voici un exemple de ce que j'aimerais faire, en pseudocode :

import tensorflow as tf

a = tf.placeholder(dtype=tf.float32,shape=())
b = tf.placeholder(dtype=tf.float32,shape=())
c = tf.placeholder(dtype=tf.float32,shape=())
d = a + b
f = b + c

# This should return [a,b] or [a.name,b.name]
d_input_tensors = get_dependencies(d)

# This should return [b,c] or [b.name,c.name]
f_input_tensors = get_dependencies(f)

EDITAR: Pour clarifier, je ne cherche pas (nécessairement) tous les placeholders du graphe, seulement ceux qui sont nécessaires pour définir un tenseur de sortie particulier. Les placeholders souhaités sont susceptibles de n'être qu'un sous-ensemble de tous les placeholders du graphe.

3voto

Johiasburg Frowell Points 224

Après quelques bricolages et découvertes este presque identique, j'ai trouvé la solution suivante :

def get_tensor_dependencies(tensor):

    # If a tensor is passed in, get its op
    try:
        tensor_op = tensor.op
    except:
        tensor_op = tensor

    # Recursively analyze inputs
    dependencies = []
    for inp in tensor_op.inputs:
        new_d = get_tensor_dependencies(inp)
        non_repeated = [d for d in new_d if d not in dependencies]
        dependencies = [*dependencies, *non_repeated]

    # If we've reached the "end", return the op's name
    if len(tensor_op.inputs) == 0:
        dependencies = [tensor_op.name]

    # Return a list of tensor op names
    return dependencies

Note : Cela ne renverra pas seulement les espaces réservés, mais aussi les variables et les constantes. Si dependencies = [tensor_op.name] est remplacé par dependencies = [tensor_op.name] if tensor_op.type == 'Placeholder' else [] alors seuls les placeholders seront renvoyés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X