2017-07-19 26 views
0

對於Tensorflow我有些新意,並且想知道在構建圖時我應該牢記什麼樣的性能考慮因素。在單個節點嵌套多個操作時,Tensorflow的性能差異

我的主要問題是,當將多個操作嵌套在單個節點時,與將每個操作分配給單獨的節點相比,是否有任何計算性能變化。例如,如果我想使用批量歸一化,接着是緻密層,和一個RELU,我可以使得所有三個操作在單個節點執行構造它:

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

或我可以將它們分離成三個獨立的節點:

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) 

顯然,這將影響代碼的緊湊性/可讀性,但是這是否也影響到TF如何實現圖形,並運行計算的呢?在單個節點上嵌套操作是否令人望而卻步,如果是這樣,是因爲性能問題,還是僅僅是風格?

如果它有所作爲,我有興趣在GPU上運行我的計算。

+0

您可以使用張量板(https://www.tensorflow.org/get_started/graph_viz)可視化正在構建的圖形。在具體的情況下,我認爲創建的圖表實際上並不相同。可讀性稍差,但您也可以打印出圖形定義(圖形的原型表示)以查看引擎蓋下創建的張量流(請參閱:https://www.tensorflow.org/extend/tool_developers/#graphdef) –

回答

0

這兩個代碼片段都會生成相同的TensorFlow圖,並且生成的圖將具有相同的性能特徵。

要驗證此斷言,您可以通過在運行任一代碼片段後調用print tf.get_default_graph().as_graph_def()來查看TensorFlow構建的tf.GraphDef協議緩衝區。