如何快速将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模型准确率高了一个百分点。
网友评论