You need to enable JavaScript to run this app. 1D CNN多分类训练报ValueError: Can not squeeze dim[1]错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

1D CNN多分类训练报ValueError: Can not squeeze dim[1]错误如何解决

错误产生原因

该错误核心是标签张量的形状和模型输出张量的形状不匹配,具体触发点有两个:

  • 你的标签y_train、y_test被处理为(样本数, 8, 1)的三维结构,但模型最后一层用softmax输出的是(样本数, 8)的二维张量,使用categorical_crossentropy损失时,Keras会自动尝试挤压多余维度,维度匹配逻辑冲突触发报错。
  • 后续调用predict_classes得到的预测结果是形状为(样本数,)的类别索引序列,和三维结构的真实标签无法匹配计算分类指标,也会触发同类维度错误。
解决方法

按顺序执行以下两步修改即可:

  1. 调整标签形状,去掉多余的最后一维
    修改你原有的标签reshape代码,删除最后一维的定义:
# 原有错误代码
# y_train= y_train.reshape(12279,8,1)
# y_test=y_test.reshape(6049,8,1)
# 替换为以下代码
y_train = y_train.reshape(12279, 8)
y_test = y_test.reshape(6049, 8)

如果不想修改reshape逻辑,也可以直接调用squeeze方法删除最后一维:

y_train = y_train.squeeze(axis=-1)
y_test = y_test.squeeze(axis=-1)
  1. 调整分类指标计算逻辑
    因为你的标签是独热编码格式,而predict_classes输出的是类别索引,需要先把真实标签转换为类别索引再计算指标:
# 原有错误代码
# recall = recall_score(y_test, y_pred, average='macro')
# precision = precision_score(y_test, y_pred, average='macro')
# f1 = f1_score(y_test, y_pred, average='macro')
# 替换为以下代码
y_true = np.argmax(y_test, axis=1)
recall = recall_score(y_true, y_pred, average='macro')
precision = precision_score(y_true, y_pred, average='macro')
f1 = f1_score(y_true, y_pred, average='macro')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 04:45:04