BP神经网络隐层节点的个数设置方法

文章转载,请说明来自《老饼讲解-BP神经网络》:www.bbbdata.com 哦~!


目录

一.原理指导

二. 经验公式

三. 建模师经验

四.试凑法优化

五. 实际操作参考


本文主要讲解BP神经网络的隐节点个数设置。

隐层,我们已经说了,基本只设一层。
我们需要确定的是隐节点个数。

对于神经网络来说,隐节点个数太少,无法拟合到复杂的关系,隐节点过多,又会导致过拟合。

一般来说,要设几个隐节点,我们并没有什么明确的方法,但有指导方法。



一.原理指导

一般来说,

1.输入输出单元数越多,隐节点越多。
2.要求逼近的规则越跌宕起伏,隐节点越多。

备注:以后会出讲解为什么是这样


二. 经验公式

隐节点个数可参考公式

三. 建模师经验

可参考建模师以往的一些成功案例,下面是本人的建模经验:

在2个输入1个输出时,用3个隐节点。
在20个输出1个输出时,用7个隐节点。

四.试凑法优化

在设置了隐节点个数后,还可以用试凑法优化:
在原设定的节点个数上,逐步增加(减少),试探多少个节点时拟合效果最佳。

备注:由于网络训练好坏跟随机初始化有关,一般会多训练几次。


五. 实际操作参考

案例:

20个输入,1个输出,

操作(隐节点的确定以下):

1.   先设定初始隐节点为4(建模经验),然后训练10次,去除最大和次大的误差,取剩下8个求平均误差,将平均误差记录下来。
2.   再设隐节点为5,训练10次….一直到取隐节点12,训练10次,求平均误差。
3.   最后可以发现平均误差会随隐节点个数先减后增(像抛物线),在隐节点=7时,平均误差最小,故最后确定隐节点为7


  相关文章

​《BP神经网络梯度推导》

​​​​​​《matlab实现BP神经网络的代码-逐行讲解》

好的,下面给出一个基于遗传算法的BP神经网络隐藏层节点个数优化的Matlab程序。 首先,我们需要定义一个适应度函数来评估每一组隐藏层节点个数的好坏。这里我们采用BP神经网络的交叉熵损失函数作为适应度函数。 ```matlab function fitness = fitnessFunction(hiddenSize, X, Y, numEpochs) % 计算每一组隐藏层节点个数的适应度 % 创建BP神经网络 net = feedforwardnet(hiddenSize); % 设置训练参数 net.divideFcn = ''; net.trainParam.epochs = numEpochs; net.trainParam.showWindow = false; % 训练BP神经网络 net = train(net, X, Y); % 预测结果 Y_pred = net(X); % 计算交叉熵损失函数 loss = crossentropy(Y, Y_pred); % 适应度为损失函数的倒数,因为我们希望适应度越大越好 fitness = 1 / loss; end ``` 接着,我们需要编写一个遗传算法来进行优化。这里我们采用MATLAB自带的`ga`函数。 ```matlab function bestHiddenSize = optimizeHiddenSize(X, Y, numEpochs, popSize, numGenerations) % 使用遗传算法优化BP神经网络隐藏层节点个数 % 设置遗传算法参数 fitnessFunc = @(hiddenSize) fitnessFunction(hiddenSize, X, Y, numEpochs); lb = 1; ub = 50; options = gaoptimset('PopulationSize', popSize, 'Generations', numGenerations, 'Display', 'off'); % 运行遗传算法 [bestHiddenSize, ~] = ga(fitnessFunc, 1, [], [], [], [], lb, ub, [], [], options); end ``` 最后,我们可以将这两个函数结合起来使用,得到最优的隐藏层节点个数。 ```matlab % 生成样本数据 X = rand(100, 10); Y = rand(100, 1); % 设置训练参数 numEpochs = 100; popSize = 50; numGenerations = 50; % 优化隐藏层节点个数 bestHiddenSize = optimizeHiddenSize(X, Y, numEpochs, popSize, numGenerations); disp(['Best hidden size: ' num2str(bestHiddenSize)]); ``` 这样,我们就可以得到最优的隐藏层节点个数了。需要注意的是,这个方法并不一定能够得到全局最优解,因为遗传算法本身就有可能会陷入局部最优解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

老饼讲解-BP神经网络

请老饼喝杯咖啡

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

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

打赏作者

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

抵扣说明:

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

余额充值