Python3.8+TF2.5+Keras2.3.1导入LayerNormalization报错咨询
报错根因
- 核心为版本不兼容+API混用:你使用的独立Keras 2.3.1仅适配TensorFlow 2.0及更早版本,与当前TensorFlow 2.5.0的内置tf.keras模块结构不匹配。TensorFlow 2.5.0中
LayerNormalization的存储路径已经从旧版本的tensorflow.python.keras.layers.normalization迁移到了新路径,独立Keras 2.3.1调用旧路径就会触发导入失败。 - 代码同时混用了独立Keras(如
from keras.layers import xxx)和TensorFlow内置Keras的API(如from tensorflow.python.keras.utils.np_utils import to_categorical),两种实现的底层逻辑不一致,进一步加重了冲突。
解决方案
方案1(推荐):统一使用TensorFlow内置的tf.keras
TensorFlow 2.x版本已经内置完整的Keras实现,不需要额外安装独立Keras包,只需修改代码头部的导入语句即可解决问题。
将原导入部分:
import cv2 import os import numpy as np from keras.layers import Conv2D,Dropout, Flatten, Dense,MaxPooling2D, MaxPool2D import keras.layers.normalization #from tensorflow.keras.layers import Conv2D,Dropout, Flatten, Dense,MaxPooling2D, MaxPool2D from keras_preprocessing.image import ImageDataGenerator from sklearn.model_selection import train_test_split from keras.models import Sequential import pandas as pd import random from tensorflow.python.keras.utils.np_utils import to_categorical
替换为:
import cv2 import os import numpy as np import pandas as pd import random from sklearn.model_selection import train_test_split # 全部从tf.keras导入API from tensorflow.keras.layers import Conv2D,Dropout, Flatten, Dense,MaxPooling2D, MaxPool2D from tensorflow.keras.preprocessing.image import ImageDataGenerator from tensorflow.keras.models import Sequential from tensorflow.keras.utils import to_categorical
修改后无需调整其他业务逻辑,直接运行即可,是TensorFlow 2.x的标准写法,兼容性最好。
方案2(不推荐):降级TensorFlow版本
如果你必须保留独立Keras 2.3.1的用法,可以将TensorFlow降级到适配的2.0.0版本,执行以下命令即可:pip install tensorflow==2.0.0
注意该版本仅适配CUDA 10.0,若要使用GPU加速需要同步降级CUDA版本,操作成本较高。
额外提醒:你代码中调用的
preprocessing函数未在贴出的代码中定义,运行前请确认该函数已实现,否则会触发名称未定义报错。
内容的提问来源于stack exchange,提问作者Felician-Nicu Herman
相关产品推荐
相关产品推荐

