bp神经网络 激活单元相关问题sigmoid?matlab

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bp神经网络 激活单元相关问题sigmoid?matlab相关的知识,希望对你有一定的参考价值。

%1.首先定义正弦函数,采样率为20H在,频率为1Hz
k=1;%设定正弦信号频率
p=[0:0.05:4];
t=cos(k*pi*p)+3*sin(pi*p);
plot(p,t,'-'),xlabel('时间');ylabel('输入信号');

% 2.生成BP网络。用newff函数生成前向型BP网络,设定隐层中神经元数目为10
%分别选择隐层的传递函数为 tansig,输出层的传递函数为 purelin,
%常见的激活函数:purelin:线性/1ogsig:对数S型/tansig:正切S型
%学习算法为trainlm。
net =newff (minmax (p) , [10,10,1],'sigmoid','sigmoid', 'purelin','trainlm');

%3.对生成的神经网络进行仿真并作图显示。
y1=sim(net,p);
plot(p,t,'-',p,y1,'*')

%4.训练。对网络进行训练,设定训练误差目标为 1e-5,最大选代次数为1000,
%学习速率为0.05。
net.trainParam.lr=0.05;%表示学习速率为0.05
net.trainParam.epochs=1000;%表示最大迭代次数是1000次(防止一直运行)
net.trainParam.goal=1e-5;%表示误差目标是1e-5
[net,tr]=train(net, p, t);

%5.再次对生成的网络进行仿真并做图显示。
y2=sim(net,p);
plot(p,t,'-',p,y2,'*')

程序如上,请问怎么修改能使隐藏层的激活函数换成sigmoid函数?

参考技术A “net=need”这条指令看起来是个两层隐藏层的网络
试试改为net=newff(minmax(p),[10,10,1],‘logsig’,’logsig’,’purelin’,’trainlm’);
注意其中的半角符号,手机打字,见谅。
推荐trainbr这个方法,模型的泛化能力较好。本回答被提问者采纳

神经网络为啥要用sigmoid函数?为啥要映射到0-1之间?求解释

参考技术A (1)对于深度神经网络,中间的隐层的输出必须有一个激活函数。否则多个隐层的作用和没有隐层相同。这个激活函数不一定是sigmoid,常见的有sigmoid、tanh、relu等。
(2)对于二分类问题,输出层是sigmoid函数。这是因为sigmoid函数可以把实数域光滑的映射到[0,1]空间。函数值恰好可以解释为属于正类的概率(概率的取值范围是0~1)。另外,sigmoid函数单调递增,连续可导,导数形式非常简单,是一个比较合适的函数
(3)对于多分类问题,输出层就必须是softmax函数了。softmax函数是sigmoid函数的推广本回答被提问者采纳

以上是关于bp神经网络 激活单元相关问题sigmoid?matlab的主要内容,如果未能解决你的问题,请参考以下文章

手推机器学习 吴恩达 神经网络BP反向传播 示例推导(下篇)

神经网络为啥要用sigmoid函数?为啥要映射到0-1之间?求解释

神经网络为啥要用sigmoid函数?为啥要映射到0-1之间?求解释

神经网络中为啥要用sigmoid函数?

具有交叉熵误差的整流线性单元激活的反向传播

bp神经网络matlab实现时,newff函数中的网络各层神经元的激活函数怎么选啊?