DeepFace调用VGG-Face预测时输入形状不兼容报错解决方法
错误原因
Keras框架下的深度学习模型输入固定为4维格式:(batch_size, height, width, channels),你打印出的模型输入形状(None, 224, 224, 3)中,首位的None代表动态批次维度,哪怕仅输入单张图像做预测,这个维度也不能省略。
当前你传入的img形状为(224, 224, 3),缺失了最前置的批次维度,模型会错误将第一维的224识别为批次大小,后续维度顺次错位,最终抛出形状不匹配的错误。
修复方法
在传入模型前,给img在第0轴(最前端)增加一个值为1的批次维度即可,两种实现方式都可正常运行:
- 方式1:使用numpy的维度扩展方法,不需要硬编码图像尺寸,通用性更好
import numpy as np # 原有代码 model = DeepFace.build_model('VGG-Face') print(img.shape) # (224, 224, 3) print(model.input_shape) # (None, 224, 224, 3) # 新增:扩展批次维度 img = np.expand_dims(img, axis=0) # 扩展后img形状为(1, 224, 224, 3),完全匹配模型输入要求 representation = model.predict(img) print(representation) return representation
- 方式2:直接reshape指定形状,适合明确知道输入尺寸的场景
img = img.reshape(1, 224, 224, 3)
补充注意:VGG-Face预训练模型要求输入像素值范围为0-255,如果你提前把图像像素归一化到0-1区间,会导致输出的特征表示异常,这点如果后续预测准确率异常可以优先排查。
内容的提问来源于stack exchange,提问作者Tlaloc-ES
相关产品推荐
相关产品推荐

