根据TensorFlowdocument,@tf.function
将函数编译成图形,并“使您获得更快的执行、在GPU或TPU上运行或导出到SavedModel的好处。”
文档中的示例说明了这样一个好处:
lstm_cell = tf.keras.layers.LSTMCell(10)
@tf.function
def lstm_fn(input, state):
return lstm_cell(input, state)
input = tf.zeros([10, 10])
state = [tf.zeros([10, 10])] * 2
# warm up
lstm_cell(input, state); lstm_fn(input, state)
print("eager lstm:", timeit.timeit(lambda: lstm_cell(input, state), number=10))
print("function lstm:", timeit.timeit(lambda: lstm_fn(input, state), number=10))
输出:
^{pr2}$“编译图”和“急切模式下的函数”有什么区别?为什么前者执行起来更快?在
在构建图时立即计算TF,默认情况下使用。另一方面,图形具有一定的advantages。但是,执行时间将取决于特定的代码。使用c++后端的代码越多,差异就越小。所有的开销都来自使用python解释器的eager模式下的程序。例如,基本的矩阵乘法运算不会得到比更复杂的DNN应用程序更多的好处。在
在图形模式下,TysFooFor构建一个表示您的模型的计算图,并通过会话将其转发到C++运行时。这提供了分布式训练的好处,并在过程中优化了计算图(通过不断的折叠等)。它还简化了部署到独立于平台的服务器的过程。在
在@tf.功能decorator允许用户在eager模式下获得图形执行的好处,但是要注意一些注意事项(例如,tf.功能首选TF ops而不是Python原语)。在
来源:https://www.tensorflow.org/guide/eagerhttps://www.tensorflow.org/alpha/tutorials/eager/tf_function
相关问题 更多 >
编程相关推荐