快速将tensorflow1.代码改为tf2.运行

如何快速将tesorflow1.代码运行在tensorflow2.环境中?

有如下方法

  • tf_upgrade_v2工具
  • 官方API

命令行执行

 tf_upgrade_v2 --infile rnn_model.py --outfile rnn_model2.py
#  tf_upgrade_v2 --infile tf1文件 --outfile 生成的tf2文件

结果如图


理想状态下转换完成就可以直接执行了现实是大概率不可以的。
其中大多数的错误是由contrib模块引起的,tensorflow1版本中contrib模块十分丰富,但是发展不可控,因此在teorflow2版本中将这个模块集成到其他模块中去了。所以需要自己改写以下代码。不同的函数对应不同的解决方法
以下举两个例子供大家参考


报错AttributeError: module 'tensorflow_core.compat.v1' has no attribute 'contrib'

#原代码
return tf.contrib.rnn.DropoutWrapper(cell, output_keep_prob=self.keep_prob)
#更改后
return tf.nn.rnn_cell.DropoutWrapper(cell, output_keep_prob=self.keep_prob)

为什么这样改,查tensorflow官网API得到的


注:我文件头已经引入import tensorflow.compat.v1 as tf所以简写了


报错AttributeError: module 'tensorflow.python.keras.api._v1.keras.layers' has no attribute 'dropout'


尝试将代码改为第一个

#原代码            
fc = tf.contrib.layers.dropout(fc, self.keep_prob)
#修改后            
fc = tf.nn.dropout(fc, self.keep_prob)

完美运行

甚至比tensorflow1模型准确率高了一个百分点。

你可能感兴趣的:(快速将tensorflow1.代码改为tf2.运行)