如何修复 "module 'tensorflow' has no attribute 'estimator' " 错误
How to fix "module 'tensorflow' has no attribute 'estimator' " error
我正在使用 conda(通过 YAML 创建的环境)+ pip 在我的 Linux Mint box 上设置 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
终于找到问题了。我仍然安装了一些本地(非 Conda)Tensorflow 包,我猜它们在 python 环境中具有更高的优先级。
这个 link 解决了我的问题:
https://github.com/tensorflow/tensorboard/issues/2067
- Uninstall tensorflow, tensorboard
- Uninstall tb-nightly(if it is installed)
- Use "pip freeze | grep tensorflow" to check if tensorflow-estimator package has been installed. If so, uninstall it.
- Go to site-packages and remove all tensorflow folders related to tensorflow, tensorboard, tensorflow-estimator etc
- Reinstall the latest versions of tensorflow and tensorboard
我的问题的关键是网站包,可以在 BOTH
找到
~/.conda/envs/<my-env>/lib/python3.<xx>/site-packages
~/.local/lib/python3.<xx>/site-packages
其中 <my-env>
是您的 conda 环境,<xx>
是您的 python 版本。
只需 rm -r <path to package>
您 ~/.local/
库中的每个 tensorflow 包并重新安装 conda 环境。
只需卸载 tensorflow
、tensorboard
和 tensorflow-estimator
,然后重新安装 tensorflow
。使用 1.14.0 版为我工作。
pip uninstall tensorflow tensorboard tensorflow-estimator
...
pip install tensorflow==1.14.0
- 卸载 tensorflow-estimator
- 重新安装使用 pip install tensorflow-estimator==(与您的 tf 版本 1.13.1 相同)
完成:
我仍然安装了一些本地(非 Conda)tensorflow 包,它们在 python 环境中具有更高的优先级
在你的
cd ~/.local
rm -r <tensorflow_package_libraries>
删除每个tensorflow包库并重新安装conda环境。
我正在使用 conda(通过 YAML 创建的环境)+ pip 在我的 Linux Mint box 上设置 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
终于找到问题了。我仍然安装了一些本地(非 Conda)Tensorflow 包,我猜它们在 python 环境中具有更高的优先级。
这个 link 解决了我的问题: https://github.com/tensorflow/tensorboard/issues/2067
- Uninstall tensorflow, tensorboard
- Uninstall tb-nightly(if it is installed)
- Use "pip freeze | grep tensorflow" to check if tensorflow-estimator package has been installed. If so, uninstall it.
- Go to site-packages and remove all tensorflow folders related to tensorflow, tensorboard, tensorflow-estimator etc
- Reinstall the latest versions of tensorflow and tensorboard
我的问题的关键是网站包,可以在 BOTH
找到~/.conda/envs/<my-env>/lib/python3.<xx>/site-packages
~/.local/lib/python3.<xx>/site-packages
其中 <my-env>
是您的 conda 环境,<xx>
是您的 python 版本。
只需 rm -r <path to package>
您 ~/.local/
库中的每个 tensorflow 包并重新安装 conda 环境。
只需卸载 tensorflow
、tensorboard
和 tensorflow-estimator
,然后重新安装 tensorflow
。使用 1.14.0 版为我工作。
pip uninstall tensorflow tensorboard tensorflow-estimator
...
pip install tensorflow==1.14.0
- 卸载 tensorflow-estimator
- 重新安装使用 pip install tensorflow-estimator==(与您的 tf 版本 1.13.1 相同)
完成:
我仍然安装了一些本地(非 Conda)tensorflow 包,它们在 python 环境中具有更高的优先级
在你的
cd ~/.local
rm -r <tensorflow_package_libraries>
删除每个tensorflow包库并重新安装conda环境。