You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

深度学习模型预测触发Graph Execution Error报错如何解决

推理预测报错排查

核心报错原因

传入卷积层的张量维度不符合要求,模型期望4维输入(批次大小、图像高度、图像宽度、通道数),实际只拿到3维张量,触发维度不兼容错误。

代码问题定位

  • 预处理逻辑错误
    你代码里的img = np.array(img)[:,:,1] # Resize image完全没有实现resize功能,作用是提取RGB图像的第2个通道(绿色通道),执行后原形状为(H, W, 3)的3通道图像会变成形状为(H, W)的2维矩阵,直接丢失了通道维度。后续你只在最前面加了批次维度,最终传入模型的张量形状是(1, H, W),只有3个维度,不满足卷积层的输入要求。
  • 函数调用不严谨
    代码里read_file、decode_image、resize、expand_dims都没有写所属模块前缀,如果你没有提前把这些函数导入到全局命名空间,会直接触发名称未定义错误;就算已经导入,也容易出现同名函数歧义。
  • 预测逻辑隐患
    你当前用tf.round处理预测结果只适合二分类场景,如果是新冠/正常/肺炎三分类任务,这种取结果的方式会直接得到错误的分类索引。

修正后可运行代码

import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt

# 提前确认img_height、img_width、model、label_data已正确定义
def load_img(filename):
    img = tf.io.read_file(filename)
    img = tf.io.decode_image(img, channels=3, expand_animations=False)
    # 注意如果输入不是正方形,resize参数要写为[img_height, img_width],不要两个参数都填img_height
    img = tf.image.resize(img, size=[img_height, img_width])
    img = np.array(img)
    img = img / 255.0
    return img

# 加载所有推理样本
inf_samples = [
    load_img(r'ML2\COVID-19\inf_set\covid\covid - 1.jpeg'),
    load_img(r'ML2\COVID-19\inf_set\covid\covid - 2.jpeg'),
    load_img(r'ML2\COVID-19\inf_set\normal\Normal - 1.jpeg'),
    load_img(r'ML2\COVID-19\inf_set\normal\Normal - 2.jpeg'),
    load_img(r'ML2\COVID-19\inf_set\pneumonia\Pneumonia - 1.jpeg'),
    load_img(r'ML2\COVID-19\inf_set\pneumonia\Pneumonia - 2.jpeg')
]

plt.figure(figsize=(35, 5))
plt.suptitle('Prediction Results', fontsize=15)
for idx, img in enumerate(inf_samples, 1):
    plt.subplot(1, 6, idx)
    # 显式加批次维度,输入形状变为(1, H, W, 3),匹配模型输入要求
    pred = model.predict(np.expand_dims(img, axis=0), verbose=0)
    # 二分类用下面这行
    res = int(tf.round(pred)[0][0])
    # 三分类请注释上面那行,改用下面这行取最大概率索引
    # res = int(tf.argmax(pred, axis=1)[0])
    plt.imshow(img)
    plt.title(f"Prediction: {label_data[res]}")
    plt.axis('off')
plt.show()

额外说明

  • 如果你训练模型时用的是单通道灰度输入,不要用切片取单个通道的写法,替换为img = tf.image.rgb_to_grayscale(img)即可,转换后形状为(H, W, 1),加批次维度后是符合要求的4维张量。
  • 路径字符串前加r是Windows系统下的正确写法,可以避免转义字符导致的文件找不到错误。

内容的提问来源于stack exchange,提问作者sildaf88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 04:57:06