2017-07-19 5 views
0

Je suis un peu nouveau dans Tensorflow et je me demandais quel genre de considérations de performances je devrais garder à l'esprit lors de la construction d'un graphique.Différences de performances dans Tensorflow lors de l'imbrication de plusieurs opérations sur un seul noeud

Ma principale question est de savoir s'il y a un changement dans les performances d'un calcul lorsque plusieurs opérations sont imbriquées sur un seul nœud, par rapport à l'attribution de chaque opération à un nœud distinct. Par exemple, si je veux utiliser la normalisation des lots, suivie d'une couche dense, et un Relu, je pourrais structurer de telle sorte que les trois opérations sont effectuées à un seul noeud:

input=tf.placeholder(shape=[None,input_len],dtype=tf.float32 
output=tf.nn.relu(tf.matmul(tf.contrib.layers.batch_norm(input),W)+b) 

ou je pourrais les séparer en trois noeuds distincts:

input=tf.placeholder(shape=[None,input_len],dtype=tf.float32 
x1=tf.contrib.layers.batch_norm(input) 
x2=tf.matmul(x1,W)+b 
ouput=tf.nn.relu(x2) 

Il est évident que cela affectera la compacité/lisibilité du code, mais cela affecte aussi comment TF implémente le graphique, et exécute les calculs? Est-ce que les opérations d'imbrication d'un seul nœud sont découragées, et si c'est le cas en raison de problèmes de performance, ou simplement stylistiques?

Si cela fait une différence, je suis intéressé à exécuter mes calculs sur un GPU.

+0

Vous pouvez utiliser tensorboard (https://www.tensorflow.org/get_started/graph_viz) pour visualiser le graphique en cours de construction. Dans votre cas concret, je ne pense pas que les graphiques créés différeront réellement. Un peu moins lisible mais vous pouvez aussi imprimer la définition graphique (une représentation protobuf du graphique) pour voir quel tensorflow créé sous le capot (voir: https://www.tensorflow.org/extend/tool_developers/#graphdef) –

Répondre

0

Les deux fragments de code généreront des graphiques TensorFlow identiques, et les graphiques résultants auront les mêmes caractéristiques de performance.

Pour valider cette assertion, vous pouvez consulter le tampon de protocole tf.GraphDef que TensorFlow construit en appelant print tf.get_default_graph().as_graph_def() après l'exécution de l'un ou l'autre fragment de code.