在单个节点上嵌套多个操作时Tensorflow的性能差异

时间:2017-07-19 23:00:16

标签: tensorflow tensorflow-gpu

我对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上运行我的计算。

1 个答案:

答案 0 :(得分:1)

两个代码片段都会生成相同的TensorFlow图,结果图将具有相同的性能特征。

要验证此断言,您可以在运行任一代码片段后通过调用tf.GraphDef来查看TensorFlow构建的print tf.get_default_graph().as_graph_def()协议缓冲区。