import keras时遇到的错误 TypeError: Descriptors cannot not be created directly. If this call came from a _

问题描述

版本对应

keras 与 tensorflow 版本对应关系:https://master–floydhub-docs.netlify.app/guides/environments/

本文版本为: tensorflow 2.2.0 + keras 2.3.0 + python3.7
版本对应一定要与链接中的表格描述一致,否则很容易报错

可以依次执行以下指令:
conda 中修改 python 版本命令:conda install python=3.7;或者新建一个 conda 环境 conda create -n keras python=3.7,这两个命令二选一执行即可。
pip install keras==2.3.0
pip install tensorflow==2.2.0

问题描述

在执行 import keras 命令时出现如下错误:

(keras) work@instance-cli0crch:~/xxxxxx/MatchZoo-master$ python
Python 3.7.13 (default, Mar 29 2022, 02:18:16) 
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import keras
Using TensorFlow backend.
Traceback (most recent call last):
  File "", line 1, in 
  File "/home/work/anaconda3/envs/keras/lib/python3.7/site-packages/keras/__init__.py", line 3, in 
    from . import utils
  File "/home/work/anaconda3/envs/keras/lib/python3.7/site-packages/keras/utils/__init__.py", line 6, in 
    from . import conv_utils
  File "/home/work/anaconda3/envs/keras/lib/python3.7/site-packages/keras/utils/conv_utils.py", line 9, in 
    from .. import backend as K
  File "/home/work/anaconda3/envs/keras/lib/python3.7/site-packages/keras/backend/__init__.py", line 1, in 
    from .load_backend import epsilon
  File "/home/work/anaconda3/envs/keras/lib/python3.7/site-packages/keras/backend/load_backend.py", line 90, in 
    from .tensorflow_backend import *
  File "/home/work/anaconda3/envs/keras/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py", line 5, in 
    import tensorflow as tf
  File "/home/work/anaconda3/envs/keras/lib/python3.7/site-packages/tensorflow/__init__.py", line 41, in 
    from tensorflow.python.tools import module_util as _module_util
  File "/home/work/anaconda3/envs/keras/lib/python3.7/site-packages/tensorflow/python/__init__.py", line 53, in 
    from tensorflow.core.framework.graph_pb2 import *
  File "/home/work/anaconda3/envs/keras/lib/python3.7/site-packages/tensorflow/core/framework/graph_pb2.py", line 16, in 
    from tensorflow.core.framework import function_pb2 as tensorflow_dot_core_dot_framework_dot_function__pb2
  File "/home/work/anaconda3/envs/keras/lib/python3.7/site-packages/tensorflow/core/framework/function_pb2.py", line 16, in 
    from tensorflow.core.framework import attr_value_pb2 as tensorflow_dot_core_dot_framework_dot_attr__value__pb2
  File "/home/work/anaconda3/envs/keras/lib/python3.7/site-packages/tensorflow/core/framework/attr_value_pb2.py", line 16, in 
    from tensorflow.core.framework import tensor_pb2 as tensorflow_dot_core_dot_framework_dot_tensor__pb2
  File "/home/work/anaconda3/envs/keras/lib/python3.7/site-packages/tensorflow/core/framework/tensor_pb2.py", line 16, in 
    from tensorflow.core.framework import resource_handle_pb2 as tensorflow_dot_core_dot_framework_dot_resource__handle__pb2
  File "/home/work/anaconda3/envs/keras/lib/python3.7/site-packages/tensorflow/core/framework/resource_handle_pb2.py", line 16, in 
    from tensorflow.core.framework import tensor_shape_pb2 as tensorflow_dot_core_dot_framework_dot_tensor__shape__pb2
  File "/home/work/anaconda3/envs/keras/lib/python3.7/site-packages/tensorflow/core/framework/tensor_shape_pb2.py", line 42, in 
    serialized_options=None, file=DESCRIPTOR),
  File "/home/work/anaconda3/envs/keras/lib/python3.7/site-packages/google/protobuf/descriptor.py", line 560, in __new__
    _message.Message._CheckCalledFromGeneratedFile()
TypeError: Descriptors cannot not be created directly.
If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
If you cannot immediately regenerate your protos, some other possible workarounds are:
 1. Downgrade the protobuf package to 3.20.x or lower.
 2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).

问题解决

pip install protobuf~=3.19.0

解决成功

然后重新执行 import keras 无错误:

(keras) work@instance-cli0crch:~/xxxxxx/MatchZoo-master$ python
Python 3.7.13 (default, Mar 29 2022, 02:18:16) 
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import keras
Using TensorFlow backend.
>>> import tensorflow

你可能感兴趣的:(keras)