BP神经网络——浅谈结构设置

目录

我的结构

✅ 一套相对“规范”的 BP 神经网络设计流程如下:

① 明确任务类型

② 确定输入层结构

③ 设计隐藏层数量和神经元个数

🧩 A. 隐藏层层数:

🧩 B. 每层神经元个数:

④ 选择激活函数

⑤ 模型编译设置

⑥ 模型训练参数

⑦ 训练效果验证

string流程图

我的结构如此设置的原因 

🔹 输入层(5 个神经元):

🔹 第一隐藏层(12 个神经元):

📌 设计原则:

✅ 设置为 12 的理由:

🔹 第二隐藏层(8 个神经元):

🔹 输出层(1 个神经元):

📊 总结结构设计逻辑:

💡 补充:怎么进一步优化这个结构?

关于经验公式

📐 常见的经验公式之一:

✅ 举个例子:

🧠 其它经验规则还有:

❗注意事项:

📌 总结一句话:


我的结构

        我曾经在一次使用BP神经网络预测碳排放的时候,采用了5-12-8-1的结构。也就是

输入层(5)→ 隐含层1(12)→ 隐含层2(8)→ 输出层(1)

但是我为什么要这样设置,这样设置的目的是什么?


✅ 一套相对“规范”的 BP 神经网络设计流程如下:


① 明确任务类型

  • 回归任务(如预测碳排放量):输出层一般 1 个神经元,激活函数用 linear

  • 分类任务:输出层根据类别数量设置,激活函数通常用 softmaxsigmoid


② 确定输入层结构

  • 输入层的神经元数 = 特征数量
    👉 比如你有 5 个特征,就设置 input_dim=5


③ 设计隐藏层数量和神经元个数

这部分没有唯一答案,但可以遵循以下原则:

🧩 A. 隐藏层层数:
  • 1 层隐藏层对大多数简单或中等复杂问题已经足够

  • 2 层可以拟合更复杂的非线性关系

  • 超过 2 层(深层网络)通常需要大量数据 + 正则化 + 更强硬件支持

🧩 B. 每层神经元个数:

可以结合下面这几个方法选择:

方法原则
经验公式(启发式)H = \frac{2}{3} \times N_{in} + N_{out},只是参考起点
逐步试验从小到大(如:5→10→15),逐步比较效果
网格搜索(Grid Search)在多个结构组合中自动找出效果最好的一组
避免过拟合神经元越多 → 拟合能力越强 → 容易过拟合,需配合正则化

④ 选择激活函数

  • 隐藏层常用:ReLU(快、抗梯度消失)

  • 输出层

    • 回归问题:linear

    • 二分类:sigmoid

    • 多分类:softmax


⑤ 模型编译设置

  • 损失函数:

    • 回归:mean_squared_error

    • 分类:binary_crossentropy / categorical_crossentropy

  • 优化器:推荐使用 Adam

  • 指标:如 mae, mse, accuracy


⑥ 模型训练参数

  • Epochs(训练轮数):一般 30-200,需结合 loss 曲线看是否收敛

  • Batch size:一般 4、8、16、32 等;小数据可用小 batch


⑦ 训练效果验证

  • 使用训练集 / 验证集 或 交叉验证方式评估

  • 画出 loss 曲线,观察是否过拟合

  • 尝试不同结构比较预测结果(如 MAE、RMSE)

string流程图

  明确任务类型(回归/分类)
              ↓
       确定输入层节点数
              ↓
    隐藏层层数 + 每层节点数设计
              ↓
    选择激活函数(ReLU、linear等)
              ↓
        选择损失函数与优化器
              ↓
      设置训练参数(Epoch、Batch)
              ↓
       模型训练 + 效果可视化
              ↓
         微调结构 → 最终模型
 


我的结构如此设置的原因 

🔹 输入层(5 个神经元):

这很明确,对应的是你模型的 5 个输入特征

  • 工业碳排放(万吨)

  • 人口数量(万人)

  • 自然增长率

  • 单位GDP能耗(吨标准煤/万元)

  • GDP

👉 所以这里设置 5 个输入神经元是固定的,不能随便改。


🔹 第一隐藏层(12 个神经元):

这是最关键的一层。为什么设置为 12

📌 设计原则:
  • 必须大于输入特征数(通常是 2~3 倍左右),才能捕捉复杂特征组合。

  • 不能太多,否则容易过拟合、训练慢、计算资源浪费。

✅ 设置为 12 的理由:
  • 5 个特征之间可能存在复杂的组合和非线性关系,我们让第一层「宽一点」,提供充足的“特征抽象能力”。

  • 12 是 5 的 2.4 倍,比较符合经验设计公式

  • h = \frac{2}{3} \times n_{in} + n_{out} \Rightarrow \frac{2}{3} \times 5 + 1 \approx 4.3
  • 👉 但这个经验值只是参考,具体还要结合实验调优


🔹 第二隐藏层(8 个神经元):

为什么又加一层?为什么是 8?

  • 作用是进一步压缩第一层抽象出的信息,让网络学会“更深层次”的特征组合。

  • 通常在第一层之后再加一层,可以让模型更有层次地抽象输入,提升泛化能力。

  • 设置为 8 是因为:

    • 稍小于前一层(12 → 8),逐步收缩;

    • 还能保持较好的非线性建模能力;

    • 减少过多参数,防止过拟合。

✅ 多一层相比只用一层通常在非线性问题(如碳排放)中会更有优势。


🔹 输出层(1 个神经元):

很简单,最终我们只需要预测一个值:碳排放量
👉 所以,输出层必须是 1 个节点,且使用 线性激活函数,适合预测连续值。


📊 总结结构设计逻辑:

层级神经元数设置理由
输入层5与输入特征数一致
隐含层112保证足够表达能力,提取复杂特征组合
隐含层28精炼信息、增强非线性建模能力
输出层1预测一个连续值:碳排放

💡 补充:怎么进一步优化这个结构?

你现在是基于经验设置的结构,是一个不错的起点。但要做到更精准预测,后期可以:

  • 用**交叉验证(cross-validation)**来尝试不同结构;

  • 使用 网格搜索/自动超参数优化(如Keras Tuner)

  • 观察训练曲线是否过拟合或欠拟合,适当加减神经元或层数;

  • 加入 正则化Dropout 等手段提高模型泛化能力。


关于经验公式

        我提到的这个“经验设计公式”是神经网络结构设计中常用的一种启发式规则(经验法则),用来帮助我们在没有大量调参的前提下,初步估计隐藏层神经元数量


📐 常见的经验公式之一:

H = \frac{2}{3} \times N_{in} + N_{out}

  • H:隐藏层神经元数(推荐值)

  • N_{in}​:输入特征数(即输入层的神经元数量)

  • N_{out}:输出值数量(通常是 1)


✅ 举个例子:

假如你的输入是 5 个特征,输出是一个碳排放值(回归问题):

H = \frac{2}{3} \times 5 + 1 = \frac{10}{3} + 1 \approx 4.33

👉 结果大概是 4~5 个神经元
但这只是一个起点你可以根据实际复杂度适当加大(比如你现在用了 12),尤其是当你觉得数据之间非线性很复杂时。


🧠 其它经验规则还有:

经验公式含义
H = \sqrt{N_{in} \times N_{out}}几何均值法,适用于需要压缩特征时
H < 2 \times N_{in}不要太多神经元,防止过拟合
H = N_{in} + N_{out} + kkkk 为常数(如0~10),适度偏大的设置

❗注意事项:

这些经验值 并不是理论定律,它们只是根据历史研究、经验总结出来的“常见好用范围”,真正最优的结构还是需要:

  • 交叉验证

  • 实验评估误差

  • 可解释性分析

比如你可以尝试设置不同的结构:5-6-1、5-10-1、5-12-8-1,对比预测效果,再做选择。


📌 总结一句话:

经验公式帮我们快速起步、避免乱猜,但要真正获得最佳效果,还是需要结合实验和数据分布来微调结构。你现在采用的结构就属于从经验出发,加入模型表达能力考虑后的升级版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WenJGo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值