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

国际象棋评估神经网络收敛至数据集均值无法正常学习问题求助

故障核心成因

  1. 输入数据形状不匹配(致命错误)
    你从DataFrame中提取的X是一维扁平化结构(单样本维度为12*8*8=768),但CNN要求输入4维张量,你既没有将X reshape为对应维度的结构,同时Keras默认使用channels_last的维度顺序,你填写的input_shape=(12,8,8,1)属于channels_first格式,和后端默认配置冲突,卷积层完全无法提取有效特征,等价于输入随机噪声,网络只能收敛到数据集均值最小化MSE。
  2. 学习率配置不合理
    初始学习率0.01远高于回归任务适配的Adam默认学习率区间(1e-4~1e-3),训练初期就会导致参数更新幅度过大陷入局部最优;同时你每训练完一个数据块就强制下调学习率,后续没有足够的梯度更新量修正初期错误的参数。
  3. 训练流程逻辑缺陷
    你在每个数据块都训练20轮,会导致模型快速过拟合当前数据块的分布,再下调学习率后无法适配后续数据块的特征,最终只能学到所有数据块的全局均值。

修复方案

  1. 修正输入数据格式
    在create_training_data返回前增加维度调整代码,适配Keras默认的channels_last配置:
# 调整输入维度为(样本数, 8, 8, 12)
X = X.values.reshape(-1, 8, 8, 12)

同时对应修改CNN的输入形状参数:

model.add(Conv2D(256, (3, 3), activation='relu', padding='same', input_shape=(8, 8, 12)))

如果你要坚持使用channels_first格式,需要先手动设置Keras后端配置,再对应调整输入维度即可。
2. 调整学习率策略
取消强制按数据块下调学习率的逻辑,改用自动学习率衰减策略,监控验证损失自动下调:

from keras.callbacks import ReduceLROnPlateau

# 回调规则:验证损失3轮不下降就将学习率减半,最低降到1e-6
lr_callback = ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=3, min_lr=1e-6)
# 初始学习率改为1e-3
optimizer=Adam(learning_rate=1e-3)
# 训练时传入回调
model.fit(
    X, y,
    epochs=20,
    batch_size=64,
    validation_split=0.1,
    callbacks=[lr_callback]
)
  1. 优化训练流程
    每个数据块训练轮次改为2~3轮即可,避免单块过拟合;训练前先对数据集做shuffle处理,保证每个数据块的分布一致。
  2. 补充优化点
  • 增加数据增强:对棋盘进行水平/垂直翻转,同时将标签取反,扩大训练样本量
  • 全连接层前增加Dropout层,抑制过拟合
  • 二次确认标签逻辑,保证lichess的评估分正负确实对应白优/黑优,没有标签翻转的错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:15:04