请问大神:函数拟合神经网络(fitnet)是BP神经网络吗?在线等待中。

请问大神:函数拟合神经网络(fitnet)是BP神经网络吗?在线等待中。,第1张

是BP神经网络,是一个只有一个隐含层的的BP神经网络。

nntraintool中的fitnet

open fitnet  命令打开MATLAB中fitnet中的函数

可以看到,里面使用了feedforwardnet()函数,这是建立BP神经网络的新函数,用以替代newff()函数。在feedforwardnet()函数中,隐藏层和输出层的传递函数分别是'tansig'和‘purelin’

tansig和purelin作为传递函数

另外需要指出的是,在建立的神经网络中,权重和阈值是归一化后的参数使用的权重和阈值,归一化的过程是在fitnet()函数中进行的。

具体的问题可以使用下面的代码来加深理解。

clear

clc

[x,t] = simplefit_dataset;

net = fitnet(10);

net = train(net,x,t);

y = net(x);   %x为输入,t为输出

%获取模型参数

w1= netiw{1,1};

b1=netb{1};

w2 = netlw{2,1};

b2=netb{2};

%%%查看网络的传递函数

ss=netlayers{1}transferFcn;

sw=netlayers{2}transferFcn;

x1=mapminmax(x);         %x1为原始数据归一化后的输入数据          

[t1,ps]=mapminmax(t);    %t1为原始数据归一化后的输出数据

t11=w2(tansig(w1x1+b1))+b2;     %t11为神经网络求取的归一化输出数据

t12=mapminmax('reverse',t11,ps);  %t12为使用模型参数并且反归一化后的输出数据

神经网络不同的网络有这不同的训练函数,BP神经网络有两种训练函数,trainbp(),利用BP算法训练前向神经网络。trainbpx(),利用快速BP算法训练前向神经网络,即采用了动量或自适应学习,可减少训练时间,tansig函数是神经元的传递函数,与训练函数无关,在trainbp()函数中含有要训练神经元的函数。

你的X1错了,X1的行数等于输入节点数,X1应该是个2x6的矩阵。所以才会报错提示超出了矩阵维数。

newff函数的格式为:net=newff(PR,[S1 S2 SN],{TF1 TF2TFN},BTF,BLF,PF),函数newff建立一个可训练的前馈网络。输入参数说明:

PR:Rx2的矩阵以定义R个输入向量的最小值和最大值;

Si:第i层神经元个数;

TFi:第i层的传递函数,默认函数为tansig函数;

BTF:训练函数,默认函数为trainlm函数;

BLF:权值/阀值学习函数,默认函数为learngdm函数;

PF:性能函数,默认函数为mse函数。

某层的神经元个数与节点数是一个意思。按你的假设:虽是3层神经网络,但是去叫做两层BP网络,因为输入层一般不算做一层。按你的假设,n就该取2,s1就是隐含层节点数,选取的公式是Hornik

提出的公式,可以算的s1取值范围,到时自己选取合适职,s2就是你输出层节点数,也就是输出维数。

1一般你可以自己尝试下,我最近也在尝试,隐层用tansig是比较理想的,输出层要自己尝试的,如用purlin是输出任意值,logsig很多书也是推崇的,将输出值限定在0,1中,我一般都用tansig

2trainlm是一种训练方法,使用的话收敛很快很快,相比的话traingd收敛很慢很慢。优势traingd要训练1000epochs,而trainlm只要训练5epochs就够了

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/12183049.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存