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

如何在Keras中实现神经元数量递增的循环训练并正确保存结果?

问题分析与修正方案

核心问题拆解

  • train_model函数内部的循环完全错误:你本意是用传入的neurons参数定义三层网络的神经元数,但函数里写了for i in range(1,66),每次调用都会构建一堆从1到65神经元的层,完全忽略了外部传入的neurons值,这直接导致外层循环失去意义,最终只得到最大神经元数的模型。
  • 变量名错误:原代码里用dataset.add(),但应该是model.add(),否则会抛出未定义dataset的错误。
  • 任务指标与损失函数不匹配:你需要记录MSE指标,但原代码用了分类任务的categorical_crossentropy损失和accuracy指标,不符合回归任务的需求。
  • 外层循环范围偏差:range(1,65)只会迭代1到64,若要包含65需改为range(1,66)。

修正后的完整代码

from keras.models import Sequential
from keras.layers import Dense
import pandas as pd

def train_model(neurons):
    # 每次训练都重新构建新模型
    model = Sequential()
    # 第一层隐藏层:neurons个神经元,tanh激活
    model.add(Dense(units=neurons, activation="tanh"))
    # 第二层隐藏层:neurons个神经元,tanh激活
    model.add(Dense(units=neurons, activation="tanh"))
    # 输出层:1个神经元(回归任务)
    model.add(Dense(units=1))
    # 回归任务用mse损失,同时监控mse指标
    model.compile(loss='mse', optimizer='adam', metrics=['mse'])
    model.fit(X_train, y_train, epochs=10, batch_size=32, verbose=0)  # verbose=0关闭训练日志输出,可选
    return model

results = []
# 迭代1到65的神经元数量(包含65)
for neurons in range(1, 66):
    model = train_model(neurons)
    # 获取测试集的MSE指标(evaluate返回[loss, mse])
    test_mse = model.evaluate(X_test, y_test, verbose=0)[1]
    results.append((neurons, test_mse))

# 保存结果到Excel
df = pd.DataFrame(results, columns=['Neurons', 'MSE'])
df.to_excel('neurons_mse_results.xlsx', index=False)
print("结果已保存到 neurons_mse_results.xlsx")

关键修正说明

  1. 移除train_model内部的无效循环,直接用传入的neurons参数定义两层隐藏层的神经元数量,严格对应三层网络结构。
  2. 修正model.add()的变量名错误,确保模型构建正常。
  3. 将损失函数改为mse,指标也设置为mse,匹配你需要记录MSE的需求。
  4. 添加verbose=0关闭训练和评估时的日志输出,避免控制台信息冗余(可根据需要改为1或2)。
  5. 调整外层循环范围到range(1,66),确保包含65个神经元的情况。
  6. 结果DataFrame的列名改为MSE,与实际保存的指标对应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:38:07