先加上这两句:
import tensorflow.compat.v1 as tf
tf.compat.v1.disable_eager_execution() 或 tf.disable_v2_behavior()
然后还是会有一些错误,这时候就要根据具体的错误来一个个解决。
大部分情况应该都会报这个错误:
ModuleNotFoundError: No module named ‘tensorflow.contrib 或者 ModuleNotFoundError: No module named ‘tensorflow.compat.v1.contrib
原因是因为tensorflow2弃用了contrib模块,那么contrib下面的所有函数在tf2中都不能用,但以前的老代码在构建神经网络时,又不可避免的会大量使用contrib这个模块。下面以我遇到的与contrib相关的错误的解决办法展开:
tensorflow.contrib.layers 可以用 tf_slim 代替:
import tensorflow.contrib.layers as layers
替换为
import tf_slim as layers
tensorflow.contrib.slim 也可以用 tf_slim 代替:
import tensorflow.contrib.slim as slim
替换为
import tf_slim as slim
tf.contrib.opt.NadamOptimizer 可以用 adam 代替:
先导入 from tensorflow.python.training.adam import AdamOptimizer as adam
tf.contrib.opt.NadamOptimizer(learning_rate=lr, use_locking=True)
替换为
adam(learning_rate=lr, use_locking=True)
from tensorflow.contrib.opt import AdamWOptimizer 也可以用 **from tensorflow.python.training.adam import AdamOptimizer ** 代替
================================================
tf.contrib.keras.backend.categorical_crossentropy 可以用 tf.keras.losses.categorical_crossentropy 代替
看样子tf.contrib.keras 可以用 tf.keras 代替,但我不知道它们下一级的函数是不是都通用
===============================================
tf.contrib.opt.ScipyOptimizerInterface 可以用 tf.optimizer.nelder_mead_minimize 代替
===============================================
tf.contrib.layers.l2_regularizer() 替换为 tf.keras.regularizers.l2()
似乎与我说的第一个替换有些矛盾,可能是l2_regularizer()函数不通用,也可能这是另一种方法
==============================================
tf.contrib.layers.linear 替换为 tf.layers.dense
=============================================
tf.contrib.layers.xavier_initializer 替换为 tf.keras.initializers.glorot_normal
============================================
以上替换不一定都可行,有的我没试过。
=============================================
其他替换:
tf.random_normal 替换为 tf.random.normal
=====================================
并不是所有的tf1的模块或函数都可以在tf2中找到完美替换,甚至找不到替换,这里附上两个链接,其他替换可以在这里找找:
contrib包迁移说明
TensorFlow对1.x版本到2.x版本迁移的说明
以后遇到其他替换,我也会陆续补充。
=========================================
其他报错:
No module named 'numpy.core._multiarray_umath'
这种错误基本上是因为numpy版本和tensorfolw版本不匹配。
解决:
pip uninstall numpy
pip install numpy-xx #版本自己查