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

TensorFlow卷积神经网络出现Negative Dimension size报错如何解决

错误含义

该错误表示你搭建的CNN在特征提取过程中,特征图的空间维度变为负数,无法完成卷积计算。错误日志明确显示,执行第四个Conv2D层时,输入的特征图尺寸已经是1×1,而你配置的卷积核尺寸为2×2、步长为2、填充方式为VALID,计算得到的输出维度为负数,因此触发异常。

卷积层使用VALID填充时的输出尺寸计算公式为:
输出尺寸 = floor((输入尺寸 - 卷积核尺寸)/步长) + 1
代入当前参数计算:floor((1 - 2)/2) + 1 = -1 + 1 = 0,维度小于1不合法,因此抛出错误。

配置错误点

你的网络中多次使用步长为2的卷积+2×2池化的组合,特征图尺寸压缩速度过快,在进入第四个卷积层前就已经被压缩到1×1,无法支撑你设置的2×2卷积核、步长2的卷积操作。

我们可以逐层推导特征图尺寸变化(假设输入IMAGE_SIZE为S):

  1. 第一层:3×3卷积(same padding,步长1)→ 输出S×S,经过2×2池化 → 尺寸变为 S/2 × S/2
  2. 第二层:3×3卷积(valid padding,步长2)→ 输出floor((S/2 -3)/2)+1,经过2×2池化 → 尺寸再缩小一半
  3. 第三层:2×2卷积(same padding,步长1)→ 尺寸不变,经过2×2池化 → 尺寸再次缩小一半
  4. 进入第四层时特征图尺寸已经为1×1,无法匹配2×2卷积核的计算要求。
修复方案

你可以任选以下一种方案解决问题:

  • 修改第四个Conv2D层的配置,将填充方式改为same,或者将步长调整为1,保证1×1的输入可以正常完成卷积计算
  • 减少前面的池化层数量,或者将池化层的步长从默认的2改为1,降低特征图的压缩速度
  • 若你的输入IMAGE_SIZE过小(如小于32),可以适当放大输入图片的分辨率,避免特征图过早被压缩到1×1
  • 直接删除第四个Conv2D层,在第三层的池化层后直接接GlobalAveragePooling2D,也可以正常完成模型构建

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:36:03