在tensorlfow2下使用tensorflow1的代码问题

先加上这两句:

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 #版本自己查
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值