运行CNN模型预测时出现InvalidArgumentError: Graph execution error求助
解决CNN预测时的InvalidArgumentError: Graph execution error
以下是可能的原因及对应的解决方法:
输入维度缺失batch轴
绝大多数预训练CNN模型要求输入张量维度为(batch_size, height, width, channels)。如果你的测试数据是单张图片,处理后维度通常为(224,224,3),缺少batch维度会触发图执行错误。解决方式是为输入添加batch轴:import numpy as np # 假设x是预处理后的单张图片张量 x = np.expand_dims(x, axis=0)预处理函数与模型不匹配
不同预训练模型的preprocess_input逻辑不同(比如ResNet的输入范围是[-1,1],VGG是[0,255]转换为均值归一化),混用预处理函数会导致数据分布异常。必须确保预处理函数和使用的base_model一一对应:# 正确示例:ResNet50对应专属预处理函数 from tensorflow.keras.applications.resnet50 import ResNet50, preprocess_input base_model = ResNet50(weights='imagenet', include_top=False)模型结构或状态被修改
如果在特征提取阶段修改过base_model的结构(比如冻结层、添加自定义层),后续直接调用predict可能导致图结构不兼容。解决方式:- 检查是否误修改了base_model的输入输出节点
- 若需要重复使用模型,重新加载未修改的预训练模型实例
数据类型不兼容
预训练模型通常期望输入为float32类型,如果你的图片数据是uint8且预处理后未转换类型,会触发类型不匹配错误。可以显式转换数据类型:x = x.astype('float32')TensorFlow图残留或GPU内存问题
多次运行模型后可能存在图碎片或内存占用问题,导致图执行失败。可以在预测前清理会话:import tensorflow as tf tf.keras.backend.clear_session() # 重新加载模型 base_model = ResNet50(weights='imagenet', include_top=False)
内容的提问来源于stack exchange,提问作者Harmanjot Singh
相关产品推荐
相关产品推荐

