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

CNN训练报InvalidArgumentError: Graph execution error排查

问题根因

该报错和Colab环境依赖、数据集本身无关,是三处代码配置不匹配直接导致的:

  • 输入维度配置冲突:ImageDataGenerator加载数据集时设置target_size=(256,256),即输入模型的实际张量尺寸为2562563,但模型第一层Conv2D错误配置input_shape=(128,1288,3)——这里1288属于明显笔误(多输入1个8),且和数据加载尺寸完全不一致,模型入口的张量预期和实际输入从训练一开始就错配。
  • 标签格式与损失函数不匹配:设置class_mode='categorical'时,数据生成器输出的是one-hot编码标签(6分类场景下标签形状为(batch_size, 6)),但编译时选用的sparse_categorical_crossentropy损失仅接收整数型类别索引标签(形状为(batch_size,)),二者混用会打乱张量维度计算逻辑。
  • Flatten层报错为上述问题的直接表现:错误的输入尺寸经过多层Conv2D、MaxPooling2D、BatchNormalization传导后,输出到Flatten层的特征图元素总数,和层逻辑推导的预期形状倍数完全不匹配,最终触发InvalidArgumentError: Graph execution error。
修复方案

按顺序调整以下配置即可解决问题:

  1. 统一全链路输入尺寸
    二选一保持尺寸一致即可,同时修正笔误:
    • 若使用256*256分辨率训练:将第一层Conv2D的input_shape参数改为(256,256,3)
    • 若使用128*128分辨率降低训练开销:将ImageDataGenerator的target_size参数改为(128,128),删除input_shape中多打的数字8,不要保留1288这类无效尺寸值
  2. 统一标签格式与损失函数
    二选一即可,不要混用:
    • 保留class_mode='categorical'配置:将模型编译阶段的损失函数替换为categorical_crossentropy
    • 保留sparse_categorical_crossentropy损失:将数据生成器的class_mode参数改为sparse
  3. 前置校验避免维度错误
    在调用fit()启动训练前,添加一行model.summary()打印模型各层输出维度,确认最后一层池化输出的特征图经过Flatten展平后的维度,和后续第一个Dense层的输入维度匹配,即可提前规避Reshape类报错。

类VGG结构堆叠注意:默认参数下MaxPooling2D步长为2,每经过一次池化特征图宽高减半,调整输入尺寸时要确认经过所有池化层后特征图宽高不会小于等于0,否则会触发额外的维度错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:21:23