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

如何修复CNN训练时validation_split相关的ValueError错误

错误根源

  • 直接触发报错的原因:你存储的标签y是Python原生int组成的列表,没有转为NumPy数组,Keras的validation_split参数仅支持张量/NumPy数组类型的输入,识别不了Python列表。
  • 你怀疑的reshape操作确实存在逻辑问题:cv2.imread默认读取3通道BGR彩色图像,你直接将3通道数据reshape为1通道,会破坏图像原始结构,PyCharm的提示就是因为实际读取的数组维度和你reshape指定的维度不匹配。

修复方案

1. 修改生成训练数据的代码

你可以选择用单通道灰度图训练,修改imread逻辑,同时把y转为NumPy数组再存储:

# 读图片的时候加灰度参数
img_array = cv2.imread(os.path.join(path,img), cv2.IMREAD_GRAYSCALE)
# ... 其余遍历代码不变
# 存pickle之前把y转成numpy数组
y = np.array(y)
# 读文件建议用with上下文管理器,不用手动处理关闭
with open("X.pickle","wb") as pickle_out:
    pickle.dump(X, pickle_out)
with open("y.pickle","wb") as pickle_out:
    pickle.dump(y, pickle_out)

如果你想用3通道彩色图训练,就不需要改imread逻辑,把reshape的最后一个维度改成3即可:

X = np.array(X).reshape(-1, IMG_SIZE, IMG_SIZE, 3)

2. (可选)优化模型结构

原代码的全连接层没有加激活函数,会降低模型拟合能力,建议修改:

model.add(Dense(64))
model.add(Activation('relu')) # 新增激活函数
model.add(Dropout(0.2)) # 新增dropout层防止过拟合

修改完成后重新生成数据集,再运行训练代码即可解决报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:24:01