模块'tensorflow'没有属性'contrib'

Öme*_*tci 10 tensorflow

我正在尝试使用Tensorflow Object-Detection-API训练自己的自定义对象检测器

我在Google计算引擎中使用“ pip install tensorflow”安装了tensorflow。然后,我按照该站点上的所有说明进行操作:https : //tensorflow-object-detection-api-tutorial.readthedocs.io/en/latest/training.html

当我尝试使用train.py时,出现以下错误消息:

追溯(最近一次通话最后一次):来自object_detection.builders的文件“ train.py”,第49行,导入dataset_builder文件“ /usr/local/lib/python3.6/dist-packages/object_detection-0.1->py3.6 .egg / object_detection / builders / dataset_builder.py“,第27行,来自object_detection.data_decoders导入tf_example_decoder文件” /usr/local/lib/python3.6/dist-packages/object_detection-0.1-py3.6.egg/object_detection /data_decoders/tf_example_decoder.py“,第27行,在slim_example_decoder = tf.contrib.slim.tfexample_decoder中AttributeError:模块'tensorflow'没有属性'contrib'

当我尝试学习tensorflow的版本时,我也会得到不同的结果。

python3 -c'将tensorflow导入为tf; 打印(tf。版本)':2.0.0-dev20190422

当我使用

pip3显示tensorflow:

名称:tensorflow版本:1.13.1摘要:TensorFlow是一个面向所有人的开源机器学习框架。主页:https : //www.tensorflow.org/ 作者:Google Inc.作者电子邮件:opensource@google.com许可证:Apache 2.0位置:/usr/local/lib/python3.6/dist-packages要求: gast,astor,absl-py,tensorflow估计器,keras预处理,grpcio,六,keras应用,轮,numpy,张量板,protobuf,termcolor必填:

    sudo python3 train.py --logtostderr --train_dir=training/ -- 
    pipeline_config_path=training/ssd_inception_v2_coco.config
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能解决这个问题?除了以下内容,我找不到与此错误消息有关的任何东西:tensorflow'module'对象没有属性'contrib'

小智 17

一种简单的方法是您可以将用 TensorFlow 1.x 编写的代码传递给以下代码,以自动将其升级到 TensorFlow 2.x。

$tf_upgrade_v2 \
--intree my_project/ \
--outtree my_project_v2/ \
--reportfile report.txt
Run Code Online (Sandbox Code Playgroud)

上面的代码将用 2.x 中实际运行的命令替换 2.x 中不推荐使用的所有命令。然后您可以在 TensorFlow 2.x 中运行代码。

如果它抛出错误并且无法转换完整的代码,请不要惊慌。请打开由上述代码生成的“report.txt”文件。在此文件中,您将找到已弃用的命令以及可在 TensorFlow 2.x 中使用的替代命令。

Taadaa,只需用新命令替换引发错误的命令即可。

例子:

如果TensorFlow 1.x中的命令是:

tf.contrib
Run Code Online (Sandbox Code Playgroud)

那么 Tensorflow 2.x 中的相同命令是:

tf.compat.v1.estimator
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,将“tf.contrib”替换为“tf.compat.v1.estimator”,这应该可以解决问题。

  • 这会引发错误:`模块'tensorflow_estimator.python.estimator.api._v1.estimator'没有属性'layers'`,因为旧的行为是:`tf.contrib.layers`。 (8认同)

NeS*_*ack 12

这个 issue可能对你有帮助,它解释了如何实现TF<2.0 中的TPUStrategy一个流行功能tf.contrib

因此,在 TF 1.X 中,您可以执行以下操作:

resolver = tf.contrib.cluster_resolver.TPUClusterResolver('grpc://' + os.environ['COLAB_TPU_ADDR'])
tf.contrib.distribute.initialize_tpu_system(resolver)
strategy = tf.contrib.distribute.TPUStrategy(resolver)
Run Code Online (Sandbox Code Playgroud)

tf.contrib已弃用的TF>2.0 中,您可以通过以下方式实现:

tf.config.experimental_connect_to_host('grpc://' + os.environ['COLAB_TPU_ADDR'])
resolver = tf.distribute.cluster_resolver.TPUClusterResolver('grpc://' + os.environ['COLAB_TPU_ADDR'])
tf.tpu.experimental.initialize_tpu_system(resolver)
strategy = tf.distribute.experimental.TPUStrategy(resolver) 
Run Code Online (Sandbox Code Playgroud)


小智 8

tf.contrib已从TF 2.0 alpha开始移出TF。
看看这些tf 2.0发行说明https://github.com/tensorflow/tensorflow/releases/tag/v2.0.0-alpha0
您可以使用tf_upgrade_v2脚本 https:/将TF 1.x代码升级到TF2.x。/www.tensorflow.org/alpha/guide/upgrade

  • 所以我在类似的项目上使用 model_main.py...但我仍然遇到相同的错误... model_main 包含最终引用 tf.contrib 的引用 (from object_detection import model_lib -&gt; from object_detection import eval_util -&gt; slim = tf.contrib.slim) ... model_main 引用 model_lib 和 model_lib 引用 eval_util,eval_util 引用 tf.contrib.slim ... 我该如何解决这个问题? (7认同)
  • 非常感谢,我阅读了 tf 2.0 发行说明,train.py 仍在使用 contrib,但仍未更新。我将使用 model_main.py (4认同)
  • @eerick - 面临同样的问题有什么解决方案吗? (3认同)

小智 5

我使用 google colab 来运行我的模型,一切都很完美,直到我使用内联 tesorboard。使用张量板内联,我遇到了同样的问题“模块'tensorflow'没有属性'contrib'”。

初始化张量板后,可以使用 setup.py(研究文件夹)重建和重新安装模型时运行训练。

  • 如果能写出步骤就太好了。 (4认同)
  • “ %tensorflow_version 1.x ”——在 google colab 顶部的单独单元格中运行此代码,您的旧代码将像魅力一样工作 (4认同)