【问题标题】:How to fix "module 'tensorflow' has no attribute 'estimator' " error如何修复“模块‘tensorflow’没有属性‘estimator’”错误
【发布时间】:2019-04-19 13:38:06
【问题描述】:

我正在使用 conda(通过 YAML 创建的环境)+ pip 在我的 Linux Mint 机器上设置 Tensorflow v1.13.1 环境。设置后,每当我尝试导入 tf.estimator 时,我都会收到标题中描述的 AttributeError

AttributeError: module 'tensorflow' has no attribute 'estimator'
  • 我没有在 conda 环境之外(或在 pip 上)安装任何版本的 TF。
  • 我确实有另一个以相同方式设置的 conda 环境,但使用的是 Tensorflow 2.0 alpha,它可以导入 tf.estimator 就好了。
  • 我已尝试删除环境并重新构建它
  • 我已尝试重新启动 :(
  • 由于某种原因,我无法将 conda 更新到 4.6:
$ conda update -n base -c defaults conda

# >>>>>>>>>>>>>>>>>>>>>> ERROR REPORT <<<<<<<<<<<<<<<<<<<<<<

    Traceback (most recent call last):
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/exceptions.py", line 819, in __call__
        return func(*args, **kwargs)
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/cli/main.py", line 78, in _main
        exit_code = do_call(args, p)
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/cli/conda_argparse.py", line 77, in do_call
        exit_code = getattr(module, func_name)(args, parser)
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/cli/main_update.py", line 14, in execute
        install(args, parser, 'update')
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/cli/install.py", line 253, in install
        handle_txn(unlink_link_transaction, prefix, args, newenv)
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/cli/install.py", line 282, in handle_txn
        unlink_link_transaction.execute()
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/core/link.py", line 223, in execute
        self.verify()
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/common/io.py", line 46, in decorated
        return f(*args, **kwds)
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/core/link.py", line 200, in verify
        self.prepare()
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/core/link.py", line 192, in prepare
        stp.remove_specs, stp.update_specs)
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/core/link.py", line 282, in _prepare
        mkdir_p(transaction_context['temp_dir'])
      File "/usr/share/anaconda3/lib/python3.7/site-packages/conda/gateways/disk/__init__.py", line 60, in mkdir_p
        makedirs(path)
      File "/usr/share/anaconda3/lib/python3.7/os.py", line 221, in makedirs
        mkdir(name, mode)
    PermissionError: [Errno 13] Permission denied: '/usr/share/anaconda3/.condatmp'

yml 文件如下所示:

dependencies:
- python
- numpy
- tensorflow
- cudatoolkit==9.0
...

从相关环境内部:

  • $ conda list tensorflow
    # packages in environment at /home/cjs/.conda/envs/my-env:
    # 
    # Name                    Version                   Build  Channel
    tensorflow                1.13.1          mkl_py37h54b294f_0
    tensorflow-base           1.13.1          mkl_py37h7ce6ba3_0
    tensorflow-estimator      1.13.0                     py_0
  • $ pip list | grep tensorflow
    tensorflow                  1.13.1
    tensorflow-estimator        1.13.0
  • $ which pip
    /home/cjs/.conda/envs/my-env/bin/pip
  • $ conda --version
    conda 4.5.11
  • $ pip --version
    pip 19.0.3 from /home/cjs/.local/lib/python3.7/site-packages/pip (python 3.7)

这里是该问题的一个最小示例。如您所见,这只发生在调用 tf.estimator 的情况下,所有其他 Tensorflow 属性都按预期运行:

Python 3.7.3 (default, Mar 27 2019, 22:11:17)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> tf.__version__
'1.13.1'
>>> tf.estimator
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'tensorflow' has no attribute 'estimator'
>>> tf.estimator.Estimator()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'tensorflow' has no attribute 'estimator'
>>> from tensorflow import estimator
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name 'estimator' from 'tensorflow' (/home/cjs/.conda/envs/my-env/lib/python3.7/site-packages/tensorflow/__init__.py)
>>> tf.Variable
<class 'tensorflow.python.ops.variables.VariableV1'>
>>> tf.keras
<module 'tensorflow._api.v1.keras' from '/home/cjs/.conda/envs/my-env/lib/python3.7/site-packages/tensorflow/_api/v1/keras/__init__.py'>
>>> tf.constant
<function constant_v1 at 0x7fb25ea24950>

更新

根据https://docs.nvidia.com/deploy/cuda-compatibility/index.html#binary-compatibility__table-toolkit-driver,我发现我的 nvidia 驱动程序和 cudatoolkit 版本不同步(390.46 与 9.0)。

我现在已将我的 NVIDIA 驱动程序更新到 v418,并且能够将我的 conda 版本更新到 4.16.14。我将上面显示的 environment.yml 更新为cudatoolkit==10.1,但我似乎无法弄清楚如何实际安装它。

我的numba -s 输出包含此部分,这让我从一开始就认为整个问题是 cuda 没有找到我的 GPU(或无法连接到它?)。

__CUDA Information__
Error: CUDA device intialisation problem. Message:Error at driver init:
[100] Call to cuInit results in CUDA_ERROR_NO_DEVICE:
Error class: <class 'numba.cuda.cudadrv.error.CudaSupportError'>

(次要)更新

能够确定 numba 问题的原因是我在更新 GPU 驱动程序后没有重新启动 (duh)。

不过,在这方面并没有完全摆脱困境。新问题如下:

__CUDA Information__
Found 1 CUDA devices
id 0          b'Quadro K620'                              [SUPPORTED]
                      compute capability: 5.0
                           pci device id: 0
                              pci bus id: 1
Summary:
        1/1 devices are supported
CUDA driver version                 : 10010
CUDA libraries:
Finding cublas
        ERROR: can't locate lib
Finding cusparse
        ERROR: can't locate lib
Finding cufft
        ERROR: can't locate lib
Finding curand
        ERROR: can't locate lib
Finding nvvm
        ERROR: can't locate lib
        finding libdevice for compute_20...     ERROR: can't open libdevice for compute_20
        finding libdevice for compute_30...     ERROR: can't open libdevice for compute_30
        finding libdevice for compute_35...     ERROR: can't open libdevice for compute_35
        finding libdevice for compute_50...     ERROR: can't open libdevice for compute_50

【问题讨论】:

  • 你能写你的代码吗?您尝试导入的点。
  • @luca.vercelli 它在我使用它的任何地方,即使在 python 解释器中,当我这样做时 >>>import tensorflow as tf,然后 >>>tf.estimator 它会产生错误
  • 好的,但是你能给我们举个例子来说明你是如何使用它的吗? import tf.estimator 给出错误?
  • 更新了一些我如何使用它的例子。
  • 还有一个疑问。你写“/home/cjs/.conda/envs/my-env”和“/home/cjs/.conda/envs/delreo-env”是故意的吗?还是您正在查看 2 个不同的环境?

标签: python tensorflow tensorflow-estimator


【解决方案1】:

终于找到问题了。我仍然安装了一些本地(非 Conda)Tensorflow 包,我猜它们在 python 环境中具有更高的优先级。

这个链接解决了我的问题: https://github.com/tensorflow/tensorboard/issues/2067

  • 卸载 tensorflow、tensorboard
  • 卸载 tb-nightly(如果已安装)
  • 使用“pip freeze | grep tensorflow”检查是否已安装 tensorflow-estimator 包。如果是,请卸载它。
  • 转到 site-packages 并删除所有与 tensorflow、tensorboard、tensorflow-estimator 等相关的 tensorflow 文件夹
  • 重新安装最新版本的 tensorflow 和 tensorboard

我的问题的关键是站点包,可以在 BOTH 找到

  • ~/.conda/envs/&lt;my-env&gt;/lib/python3.&lt;xx&gt;/site-packages
  • ~/.local/lib/python3.&lt;xx&gt;/site-packages

&lt;my-env&gt; 是您的 conda 环境,&lt;xx&gt; 是您的 python 版本。

只需rm -r &lt;path to package&gt; ~/.local/ 库中的每个 tensorflow 包,然后重新安装 conda 环境。

【讨论】:

    【解决方案2】:

    只需卸载tensorflowtensorboardtensorflow-estimator 并重新安装tensorflow。使用版本 1.14.0 为我工作。

    pip uninstall tensorflow tensorboard tensorflow-estimator
    ...
    pip install tensorflow==1.14.0
    

    【讨论】:

      【解决方案3】:
      1. 卸载 tensorflow-estimator
      2. 使用 pip install tensorflow-estimator==(与您的 tf 版本 1.13.1 相同)重新安装它

      【讨论】:

        【解决方案4】:

        完成:

        我仍然安装了一些本地(非 Conda)tensorflow 包,它们在 python 环境中具有更高的优先级

        在你的

        cd ~/.local
        rm -r <tensorflow_package_libraries>
        

        移除每个tensorflow包库,重新安装conda环境。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-05-25
          • 2019-08-25
          • 2020-09-03
          • 2020-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-02
          相关资源
          最近更新 更多