我遇到了一个问题,我需要你的帮助。我正在尝试对渴望和图形模式之间的执行时间进行基准测试。我正在使用一个非常简单的模型(只有一个密集层)。
这是图形版本:
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装饰器,差别就更大了。有人解释吗?
谢谢