解决基于EfficientNet+PCA的分类模型单图预测输入形状不匹配问题
解决宫颈细胞图像分类模型的输入形状不兼容问题
错误原因
你的全连接神经网络(sequential_1)训练时接收的是经过EfficientNetB7提取、MinMaxScaler归一化、PCA降维后的15维特征向量,但你直接将原始/预处理后的图像张量(形状(None,32,32,3))输入给它,两者形状不匹配,导致报错。测试流程必须和训练流程完全对齐,跳过中间特征处理步骤必然出错。
正确的单图分类流程
你需要复刻训练时的完整预处理+特征转换 pipeline,步骤如下:
1. 准备训练阶段保存的关键组件
训练时必须保存以下3个组件(如果没保存,需要重新训练并保存):
- 用于特征提取的EfficientNetB7特征提取器(需去掉顶层分类层,保留特征输出部分)
- 拟合好的MinMaxScaler对象
- 拟合好的PCA模型
- 训练完成的全连接神经网络模型
可以用joblib保存Scaler和PCA:
import joblib joblib.dump(scaler, 'minmax_scaler.pkl') joblib.dump(pca, 'pca_model.pkl')
用Keras的save()方法保存特征提取器和全连接模型:
base_model.save('efficientnet_feature_extractor.h5') fc_model.save('fc_classifier.h5')
2. 测试图像的预处理(与训练集完全一致)
- 读取PNG图像,转换为RGB格式(EfficientNetB7要求3通道输入,若训练集是灰度图,需复制通道到3层)
- 调整图像尺寸至训练集使用的尺寸(你训练集是2048×1536,测试图必须resize到相同尺寸,或和训练时输入给EfficientNet的尺寸一致)
- 应用EfficientNet的官方预处理(和训练时一致):
import cv2 import numpy as np from tensorflow.keras.applications.efficientnet import preprocess_input # 读取并处理图像 img = cv2.imread('test_image.png') img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 转RGB img = cv2.resize(img, (2048, 1536)) # 与训练集尺寸一致 img = preprocess_input(img) # EfficientNet预处理 img = np.expand_dims(img, axis=0) # 扩展为批量维度,形状变为(1,2048,1536,3)
3. 特征提取、归一化与降维
加载训练时保存的组件,依次执行特征转换:
from tensorflow.keras.models import load_model import joblib # 加载组件 base_model = load_model('efficientnet_feature_extractor.h5') scaler = joblib.load('minmax_scaler.pkl') pca = joblib.load('pca_model.pkl') fc_model = load_model('fc_classifier.h5') # 提取特征 features = base_model.predict(img) # 形状为(1, 特征维度),比如EfficientNetB7全局池化后是2560维 # 归一化 scaled_features = scaler.transform(features) # PCA降维到15维 pca_features = pca.transform(scaled_features) # 形状变为(1,15)
4. 执行分类预测
将降维后的特征输入全连接模型:
predictions = fc_model.predict(pca_features) # 根据你的任务处理预测结果,比如取argmax得到类别 pred_class = np.argmax(predictions, axis=1)[0] print(f"预测类别:{pred_class}")
关键注意事项
- 所有预处理步骤(尺寸、颜色通道、归一化方式)必须和训练集完全一致,否则特征分布不匹配会导致分类结果失效。
- 不能在测试数据上重新拟合Scaler或PCA,必须使用训练集拟合好的对象,避免数据泄露。
- 若训练时对EfficientNetB7的层做了冻结或微调,测试时加载的特征提取器必须保持相同的权重状态。
内容的提问来源于stack exchange,提问作者aayushkap
相关产品推荐
相关产品推荐

