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

神经网络Bayesian优化调参遇ValueError及target列nan问题求助

贝叶斯优化超参数调优问题解答

1. target列的含义

target列是贝叶斯优化框架记录的目标函数返回值,对应你代码中nn_cl_bo函数的输出结果:也就是5折交叉验证得到的负均方误差neg_mean_squared_error的均值。贝叶斯优化的核心逻辑就是不断搜索超参数组合,最大化这个target值。

2. target出现NaN及报错的原因

二者是同一个问题的不同表现:因为目标函数执行过程中出错,没有返回有效数值,所以target显示为NaN,执行过程中抛出ValueError: Input contains NaN, infinity or a value too large for dtype('float64')。
常见触发原因如下:

  • 超参数类型错误:layers1、layers2两个参数仅做了范围定义,你没有将贝叶斯优化返回的浮点型结果转为整数,直接传入range()函数会触发报错,导致交叉验证无法得到有效评分。
  • 学习率设置过高:你当前设置的学习率范围是(0.01, 1),超过0.01的学习率对于RNN和Adam/RMSprop优化器来说极易触发梯度爆炸,训练过程中损失、权重都会变为inf,后续计算时就会触发数值类型错误。
  • 输入维度不匹配:你定义的SimpleRNN输入维度是(25,1),如果train_x的维度没有调整为(样本数, 25, 1),会直接导致训练失败。

3. 修复方案

# 第一步:在nn_cl_bo函数的参数处理段补充layers1、layers2的类型转换
neurons = round(neurons)
activation = activationL[round(activation)]
batch_size = round(batch_size)
epochs = round(epochs)
layers1 = round(layers1) # 新增
layers2 = round(layers2) # 新增
# 第二步:缩小学习率范围,避免梯度爆炸
params_nn ={
    # 其他参数不变
    'learning_rate':(1e-5, 0.01), # 修改学习率上限为0.01
}
# 第三步:增加异常捕获,避免无效参数打断优化流程
try:
    score = cross_val_score(nn, train_x, train_y, scoring='neg_mean_squared_error', cv=kf, fit_params={'callbacks':[es]}).mean()
except:
    # 异常时返回极小值,引导优化器避开当前超参数区间
    return -1 * 10 ** 18
# 第四步:训练前确认训练数据维度
print(train_x.shape) # 输出应为 (总样本数, 25, 1),如果不对提前调整reshape

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:24:08