下面将升级代码到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接口。