上海启嘟渡科技商贸有限公司
SEARCH

与我们合作

我们专注提供互联网一站式服务,助力企业品牌宣传多平台多途径导流量。
主营业务:网站建设、移动端微信小程序开发、营销推广、基础网络、品牌形象策划等

您也可通过下列途径与我们取得联系:

微 信: wxyunyingzhe

手 机: 15624122141

邮 箱:

TensorFlow2.0 使用tf.function装饰器将动态图转化成静态图加速

更新时间:2025-01-08 01:06:21

这里只是一些简单的介绍

假设我们要把一个模型的前向传播转化成静态图:

这个装饰器对任何 只包含tensor操作 的函数都有效.

在eager执行模式下, 可以使用普通的python语法对流程进行控制, 但是在tf.function装饰的函数中, 要对上面的2种方式进行转化.

使用1.x的 tf.cond , tf.while_loop 的方式进行控制应该也是可以的.

在使用 tf.function 装饰的函数中print只会在最初执行1次, tf.Variable() 也是. 如果要每次都执行需要使用tf.print

如果要使用类似python中类似list的数据结构, 可以使用tf.TensorArray

@tf.function是支持多态的, 假设有以下函数

在 x=tf.constant(0) 和 y=tf.constant(1) , x=tf.constant(0.0) 和 y=tf.constant(1.0) 的情况下是会产生两个不同的静态图的, 甚至 x=tf.constant(0) 和 y=tf.constant(1) , x=tf.constant(1) 和 y=tf.constant(1) 都是两个不同的静态图, 因为他们的数据类型不同, 或者数值不同都会造成静态图不同, 这时候静态图可能比eager执行方式更加费时, 因为需要retracing是哪一张静态图. 所以在使用@tf.function时最好指定输入数据的类型和shape, 类似于tensorflow1.x中 tf.placehold 的效果:

此时输入 x=tf.constant(0) 和 y=tf.constant(1) , x=tf.constant(1) 和 y=tf.constant(1) 都会调用同一张静态图. 另外, 传入的每一个python类型也都会构造一个图, 所以最好把 training=True 改为 training=tf.constant(True) .

和tensorflow1.x中tf.shape于get_shape()/shape的区别类似, 在 tf.function 装饰的函数中, 需要使用 tf.shape() 获取tensor的shape, 而不能使用 get_shape() 或者 shape . 否则会产生 NoneType 错误.

多重随机标签

猜你喜欢文章

QQ客服 电话咨询