首先这是一个tensorflow1.x和tensorflow2.x的一个冲突,很多tensorflow1.x的包都被删除和移动到别的地方,网上面最多的做法就是降级,降级了不是可能会引发更多的冲突吗,我不是很理解,也有可能是我技术不到家,还没法领悟。

下面我将演示自己的改python额外安装包源码的过程。这是在tf2.x的状态:

from tensorflow.contrib.crf import viterbi_decode

Traceback (most recent call last):
  File "C:\Users\csdn\.conda\envs\lastner\Lib\site-packages\fool\predictor.py", line 7, in <module>
    from tensorflow.contrib.crf import viterbi_decode
ModuleNotFoundError: No module named 'tensorflow.contrib'

可以看到报错了跑不动,下面开始操作:你可先百度你需要的模块在不在额外的装包里动动小手查查在哪,我就不赘述了当然你也可以使用官网的搜索功能:比如我想要导入viterbi_decode

TensorFlow (google.cn),动动小手去点击一下:

不降级解决No module named ‘tensorflow.contrib‘

不降级解决No module named ‘tensorflow.contrib‘

不降级解决No module named ‘tensorflow.contrib‘

看到你需要的位置了吗,那就接着下一步,把我们需要的模块的路径重新修改导入。顺便再介绍一下tensorflow2.x已经将tf.contrib移除,许多功能转移到了第三方库,现在绍其中的我需要的一个库tensorflow_addons(tfa)的安装与使用方法:可与去github看看版本对应,或者直接,安装出错再说,反正是探索。

tfa安装:pip install tensorflow_addons==版本号

Module: tfa  |  TensorFlow Addons

打开这个链接,你将看到下面的情况:找到Fliter过滤搜索你需要的tfa的模块

不降级解决No module named ‘tensorflow.contrib‘

from tensorflow_addons.text import viterbi_decode##(自行修改源码)

安装完成后,再改python封装包的源码的导入过程:跑一下看看

C:\Users\csdn\.conda\envs\lastner\lib\site-packages\tensorflow_addons\utils\ensure_tf_install.py:67: UserWarning: Tensorflow Addons supports using Python ops for all Tensorflow versions above or equal to 2.9.0 and strictly below 2.12.0 (nightly versions are not supported). 
 The versions of TensorFlow you are currently using is 2.6.2 and is not supported. 
Some things might work, some things might not.
If you were to encounter a bug, do not file an issue.
If you want to make sure you're using a tested and supported configuration, either change the TensorFlow version or the TensorFlow Addons's version. 
You can find the compatibility matrix in TensorFlow Addon's readme:
https://github.com/tensorflow/addons
  UserWarning,

出现了一个小警告,没事看看我自己写的小程序能不能跑通这个被修改源码的包,然后又出现了小bug,重复上面的操作,去搜索:GFile

AttributeError: module 'tensorflow' has no attribute 'GFile'

with tf.io.gfile.GFile(path, "rb") as f:#修改

 module 'tensorflow' has no attribute 'GraphDef'

又出来bug了,再去搜索一下GraphDef再次修改:我们可以看到我们需要的模块GraphDef 在tensorflow.compat.v1里可以使用暴力手法把tf.compat.v1.GraphDef直接导入。这可能会导致其他包报错,但是你可以先这样笼统的试一下,如果可以跑就ok了,不可以再去查。

import tensorflow.compat.v1 as tf

不降级解决No module named ‘tensorflow.contrib‘

 然后再去跑一下总的程序,看看能不能跑:答案是完美解决,可以跑通了。

不降级解决No module named ‘tensorflow.contrib‘

 我想说的是,我的方法虽然很笨拙,已经到了修改第三方库的源码的地步了,但是这是一种方法,一种不需要去乱降级,瞎搞一通要好的多,希望对大家有用。

看完要点赞,不要白嫖。

发表回复