PyCharm中Keras与TensorFlow安装后运行报错求助
股票价格分析代码运行报错及解决方法
在PyCharm中通过解释器及终端安装Keras和TensorFlow后,运行股票价格分析代码时接连出现两个报错:先是protobuf相关TypeError,处理后又出现numpy的AttributeError。
运行代码
import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib.pylab import rcParams rcParams['figure.figsize']=20,10 from keras import Sequential from keras import LSTM,Dropout,Dense from sklearn.preprocessing import MinMaxScaler df=pd.read_csv("/Users/apple/Desktop/NSE-Tata-Global-Beverages-Limited.csv") df.head() df["Date"]=pd.to_datetime(df.Date,format="%Y-%m-%d") df.index=df['Date'] plt.figure(figsize=(16,8)) plt.plot(df["Close"],label='Close Price history')
初始报错(protobuf相关TypeError)
Users/apple/PycharmProjects/pythonProject4/venv/bin/python /Users/apple/PycharmProjects/pythonProject4/main.py Traceback (most recent call last): File "/Users/apple/PycharmProjects/pythonProject4/main.py", line 9, in <module> from keras import Sequential File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/keras/__init__.py", line 21, in <module> from keras import models File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/keras/models/__init__.py", line 18, in <module> from keras.engine.functional import Functional File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/keras/engine/functional.py", line 24, in <module> import tensorflow.compat.v2 as tf File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/tensorflow/__init__.py", line 24, in <module> from tensorflow.python import * File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/tensorflow/python/__init__.py", line 75, in <module> from tensorflow.core.framework.graph_pb2 import * File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/tensorflow/core/framework/graph_pb2.py", line 16, in <module> from tensorflow.core.framework import node_def_pb2 as tensorflow_dot_core_dot_framework_dot_node__def__pb2 File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/tensorflow/core/framework/node_def_pb2.py", line 16, in <module> from tensorflow.core.framework import attr_value_pb2 as tensorflow_dot_core_dot_framework_dot_attr__value__pb2 File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/tensorflow/core/framework/attr_value_pb2.py", line 16, in <module> from tensorflow.core.framework import tensor_pb2 as tensorflow_dot_core_dot_framework_dot_tensor__pb2 File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/tensorflow/core/framework/tensor_pb2.py", line 16, in <module> from tensorflow.core.framework import resource_handle_pb2 as tensorflow_dot_core_dot_framework_dot_resource__handle__pb2 File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/tensorflow/core/framework/resource_handle_pb2.py", line 36, in <module> _descriptor.FieldDescriptor( File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/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). Process finished with exit code 1
后续报错(numpy相关AttributeError)
/Users/apple/PycharmProjects/pythonProject4/venv/bin/python /Users/apple/PycharmProjects/pythonProject4/main.py /Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/tensorflow/python/framework/dtypes.py:471: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'. _np_qint8 = np.dtype([("qint8", np.int8, 1)]) /Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/tensorflow/python/framework/dtypes.py:472: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'. _np_quint8 = np.dtype([("quint8", np.uint8, 1)]) /Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/tensorflow/python/framework/dtypes.py:473: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'. _np_qint16 = np.dtype([("qint16", np.int16, 1)]) /Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/tensorflow/python/framework/dtypes.py:474: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'. _np_quint16 = np.dtype([("quint16", np.uint16, 1)]) /Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/tensorflow/python/framework/dtypes.py:475: FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'. _np_qint32 = np.dtype([("qint32", np.int32, 1)]) /Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/tensorflow/python/framework/dtypes.py:490: FutureWarning: In the future `np.object` will be defined as the corresponding NumPy scalar. (This may have returned Python scalars in past versions. (np.object, string), Traceback (most recent call last): File "/Users/apple/PycharmProjects/pythonProject4/main.py", line 9, in <module> from keras import Sequential File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/keras/__init__.py", line 21, in <module> from keras import models File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/keras/models/__init__.py", line 18, in <module> from keras.engine.functional import Functional File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/keras/engine/functional.py", line 24, in <module> import tensorflow.compat.v2 as tf File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/tensorflow/__init__.py", line 24, in <module> from tensorflow.python import * File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/tensorflow/python/__init__.py", line 84, in <module> from tensorflow.python.framework.framework_lib import * File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/tensorflow/python/framework/framework_lib.py", line 73, in <module> from tensorflow.python.framework.ops import Graph File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/tensorflow/python/framework/ops.py", line 39, in <module> from tensorflow.python.framework import dtypes File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/tensorflow/python/framework/dtypes.py", line 490, in <module> (np.object, string), ^^^^^^^^^ File "/Users/apple/PycharmProjects/pythonProject4/venv/lib/python3.11/site-packages/numpy/__init__.py", line 284, in __getattr__ raise AttributeError("module {!r} has no attribute " AttributeError: module 'numpy' has no attribute 'object'. Did you mean: 'object_'? Process finished with exit code 1
解决方法
针对protobuf报错
- 降级protobuf到3.20.x版本,在PyCharm终端执行:
pip install protobuf==3.20.3 - 或者设置环境变量(性能会下降):
在PyCharm的运行配置中添加环境变量PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python,或在终端执行:export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python
针对numpy报错
该问题源于高版本numpy(1.24+)移除了np.object,而当前TensorFlow版本不兼容,解决方式二选一:
- 降级numpy到兼容版本,比如1.23.5:
pip install numpy==1.23.5 - 升级TensorFlow到支持高版本numpy的版本(建议升级到2.10+,同时Keras 2.10+已整合到TensorFlow中):
pip install --upgrade tensorflow keras
终极方案:创建兼容的虚拟环境
若单独调整版本仍有问题,建议重新创建虚拟环境并安装指定版本的依赖:
- 新建并激活虚拟环境
- 执行以下命令安装兼容版本:
pip install tensorflow==2.10.0 keras==2.10.0 numpy==1.23.5 pandas==1.5.3 matplotlib==3.6.2 scikit-learn==1.1.3 protobuf==3.20.3
内容的提问来源于stack exchange,提问作者askit
相关产品推荐
相关产品推荐

