使用Keras时遇AttributeError:keras.layers无TextVectorization属性
问题原因
你的环境中同时安装了独立版Keras 3.1.1和TensorFlow 2.16.1,两者的keras命名空间存在冲突:
- 执行
import keras时,Python可能优先导入TensorFlow内置的keras模块(而非独立Keras),导致API结构不匹配:- TensorFlow内置的
keras.layers未直接暴露TextVectorization(需通过tf.keras.layers.TextVectorization访问); - TensorFlow的
keras模块没有__version__属性,版本信息需通过tf.keras.__version__获取。
- TensorFlow内置的
解决方案
选择以下两种方案之一,彻底避免命名空间冲突:
方案一:仅使用TensorFlow内置的Keras(推荐)
TensorFlow 2.16+已内置Keras 3的全部功能,无需单独安装独立Keras:
- 卸载冲突包:
pip uninstall -y keras tensorflow - 重新安装指定版本的TensorFlow:
pip install tensorflow==2.16.1 - 修改代码,统一使用
tf.keras的导入方式:import os os.environ["KERAS_BACKEND"] = "tensorflow" import pandas as pd import pathlib import random import string import re import numpy as np import tensorflow as tf MAX_SEQUENCE_LENGTH = 40 INP_VOCAB_SIZE = 15000 input_vectorization = tf.keras.layers.TextVectorization( max_tokens=INP_VOCAB_SIZE, output_mode="int", output_sequence_length=MAX_SEQUENCE_LENGTH ) - 若需查看版本,使用
tf.keras.__version__代替keras.__version__。
方案二:仅使用独立版Keras
若倾向于使用独立Keras,需确保导入的是独立库而非TensorFlow内置模块:
- 卸载冲突包:
pip uninstall -y keras tensorflow - 重新安装独立Keras和TensorFlow(TensorFlow作为后端依赖):
pip install keras==3.1.1 tensorflow==2.16.1 - 修改代码,使用独立Keras的正确导入方式:
import os os.environ["KERAS_BACKEND"] = "tensorflow" import pandas as pd import pathlib import random import string import re import numpy as np import keras from keras.layers import TextVectorization MAX_SEQUENCE_LENGTH = 40 INP_VOCAB_SIZE = 15000 input_vectorization = TextVectorization( max_tokens=INP_VOCAB_SIZE, output_mode="int", output_sequence_length=MAX_SEQUENCE_LENGTH ) - 查看版本可直接使用
keras.__version__。
注意事项
- 不要同时混用
import keras和import tf.keras,否则会持续出现命名空间冲突; - 建议使用虚拟环境安装依赖,避免全局环境依赖混乱。
内容的提问来源于stack exchange,提问作者Leila Saxby
相关产品推荐
相关产品推荐

