下面将升级代码到TensorFlow 2.x版本的方法汇总起来,有如下几点。
1.最快速转化的方法
在代码中没有使用contrib模块的情况下,可以在代码最前端加上如下两句,直接可以实现的代码升级。
import tensorflow.compat.v1 as
tftf.disable_v2_behavior()
这种方法只是保证代码在TensorFlow 2.x版本上能够运行,并不能发挥TensorFlow的最大性能。
2.使用工具进行转化的方法
在代码中没有使用contrib模块的情况下,用tf_upgrade_v2工具可以快速实现代码升级。当然tf_upgrade_v2工具并不是万能的,它只能实现基本的API升级。一般在转化完成之后还需要手动二次修改。
3.将静态图改成动态图的方法
静态图可以看作程序的运行框架,可以将输入输出部分原样的套用在函数的调用框架中。具体步骤如下:
(1)将会话(session)转化成函数。
(2)将注入机制中的占位符(tf.placeholder)和字典(feed_dict)转化成函数的输入参数。
(3)将会话运行(session.run)后的结果转化成函数的返回值。
在实现过程中,可以通过自动图功能,用简单的函数逻辑替换静态图的运算结构。自
4.将共享变量的作用于转成Python对象的命名空间
在定义权重参数时,用tf.Variable函数替换tf.get_variable函数。每个变量的命名空间(variable_scope)用类对象空间进行替换,即将网络封装成类的形式来搭建模型。
在封装类的过程中,可以继承tf.keras接口(如:tf.keras.layers.Layer、tf.keras.Model)也可以继承更底层的接口(如tf.Module、tf.layers.Layer)。
在对模型进行参数更新时,可以使用实例化类对象的variables和trainable_variables属性来控制参数。
5.升级TF-slim接口开发的程序
TensorFlow 2.x版本将彻底抛弃TF-slim接口,所以升级TF-slim接口程序会有较大的工作量。官方网站给出的指导建议是:如果手动将TF-slim接口程序转化为tf.layers接口实现,则可以满足基本使用;如果想与TensorFlow 2.x版本结合得更加紧密,则可以再将其转化为tf.keras接口。