1

我遇到了一个问题,我需要你的帮助。我正在尝试对渴望和图形模式之间的执行时间进行基准测试。我正在使用一个非常简单的模型(只有一个密集层)。

这是图形版本:

import tensorflow as tf
import numpy as np
import timeit

graph = tf.Graph()
with graph.as_default():
  x = tf.placeholder(tf.float32, [10, 200, 200, 3])
  f = tf.keras.layers.Flatten()(x)
  c = tf.keras.layers.Dense(512, activation='relu')(f)

with tf.Session(graph=graph) as sess:
  sess.run(tf.global_variables_initializer())
  val = np.ones((10, 200, 200, 3)) * 3.5
  # warmup
  sess.run(c, {x: val})
  print(timeit.timeit(lambda: sess.run(c, {x: val}), number=1000)/1000)

这是急切的版本

import tensorflow as tf
import numpy as np
import timeit
tf.enable_eager_execution()

flatten_layer = tf.keras.layers.Flatten()
dense_layer = tf.keras.layers.Dense(512, activation='relu')

def c(x):
  f = flatten_layer(x)
  return dense_layer(f)

val = tf.math.scalar_mul(3.5, tf.ones((10, 200, 200, 3)))
# warmup
c(val)
print(timeit.timeit(lambda: c(val), number=1000)/1000)

我正在使用 tf 1.14,我面临的问题是(如果是一个)图形版本比渴望版本慢。以下是图表和急切版本的输出(分别):

0.003849512729793787    

0.0008663320459891111

我预计结果会被反转,所以我真的不明白为什么图形版本比渴望的版本慢。如果我在 Eager 版本中使用tf.function装饰器,差别就更大了。有人解释吗?

谢谢

4

0 回答 0