简化function error = fitness(x) %该函数用来计算适应度值 load data inputnum hiddennum outputnum net inputn outputn inputn_test outputps output_test %提取 w1=x(1:inputnum*hiddennum);%取到输入层与隐含层连接的权值 B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);%隐含层神经元阈值 w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);%取到隐含层与输出层连接的权值 B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);%输出层神经元阈值 net.trainParam.showWindow=0; %隐藏仿真界面 %网络权值赋值 net.iw{1,1}=reshape(w1,hiddennum,inputnum);%将w1由1行inputnum*hiddennum列转为hiddennum行inputnum列的二维矩阵 net.lw{2,1}=reshape(w2,outputnum,hiddennum);%更改矩阵的保存格式 net.b{1}=reshape(B1,hiddennum,1);%1行hiddennum列,为隐含层的神经元阈值 net.b{2}=reshape(B2,outputnum,1); %网络训练 net=train(net,inputn,outputn); an=sim(net,inputn_test); test_simu=mapminmax('reverse',an,outputps); error=mse(output_test,test_simu);
时间: 2024-03-04 13:53:21 浏览: 131
这段代码是一个用来计算神经网络适应度值的函数。其中涉及到了一些神经网络的基本概念,比如输入层、隐含层、输出层、权值、阈值等。该函数的输入参数是一组权值和阈值,其中包括输入层与隐含层连接的权值、隐含层神经元阈值、隐含层与输出层连接的权值以及输出层神经元阈值。函数主要的操作是将权值和阈值按照一定的格式提取出来,并赋值给一个神经网络模型中对应的参数。然后利用提供的训练数据对神经网络进行训练,得到训练后的网络模型。最后利用测试数据对训练后的神经网络进行测试,并计算预测结果与真实结果之间的均方误差,作为该组权值和阈值的适应度值。
相关问题
for i=1:sizepop %随机产生一个种群 pop(i,:)=5*rands(1,inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum); %初始种群 vov(i,:)=rands(1,inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum); %初始化速度 %计算适应度 fitness(i)=fun(pop(i,:),inputnum,hiddennum,outputnum,net,P,T); %染色体的适应度 end
这段代码是遗传算法中的初始化过程,其中sizepop表示种群的大小,for循环是对每个个体进行随机初始化。pop是种群的矩阵,每一行表示一个个体,每个个体包含输入层到输出层的所有权重和偏差,其大小为inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum。vov是速度矩阵,其大小与pop相同。fitness是适应度数组,其中每个元素表示对应个体的适应度。fun是计算个体适应度的函数,其输入为一组权重和偏差,以及神经网络的配置和训练数据。这段代码的作用是随机生成一组初始种群,并计算每个个体的适应度。
res = xlsread('Copy_of_数据集.xlsx');input=res((1: 120), 2: 6)'; %载入输入数据 output=res((1: 120), 7 :9)'; %载入输出数据input_这段代码的预测结果为什么都是0train = input(1:80); outest_simu=mapminmax('reverse',an,outputps); tput_train =output(1:80); input_test = input(80:100); output_test =output(80:100); %节点个数 inputnum=3; % 输入层节点数量 hiddennum=10;% 隐含层节点数量 outputnum=2; % 输出层节点数量[inputn,inputps]=mapminmax(input_train,-1,1);%归一化到[-1,1]之间,inputps用来作下一次同样的归一化 [outputn,outputps]=mapminmax(output_train,-1,1);net=newff(inputn,outputn,hiddennum,{'tansig','purelin'},'trainlm');% 建立模型,传递函数使用purelin,采用梯度下降法训练 W1= net. iw{1, 1};%输入层到中间层的权值 B1 = net.b{1};%中间各层神经元阈值 W2 = net.lw{2,1};%中间层到输出层的权值 B2 = net. b{2};%输出层各神经元阈值net.trainParam.epochs=15000; net.trainParam.lr=0.01; net.trainParam.goal=0.0001; net=train(net,inputn,outputn);inputn_test=mapminmax('apply',input_test,inputps);an=sim(net,inputn_test);error=test_simu-output_test; figure('units','normalized','position',[0.119 0.2 0.38 0.5]) plot(output_test,'bo-') hold on plot(test_simu,'r*-') hold on.an = mapminmax('reverse', an, outputps); % 将预测结果反归一化 output_test = mapminmax('reverse', output_test, outputps); % 将真实结果反归一化 figure; plot(output_test(1,:), 'b-o'); hold on; plot(an(1,:), 'r-*'); legend('真实结果', '预测结果'); xlabel('样本编号'); ylabel('输出值'); title('预测结果和真实结果');
这段代码中没有进行预测操作,只是建立了一个神经网络模型并用已有数据进行了训练。因此,没有预测结果为0的问题。如果您有需要进行预测的数据,需要在模型训练完成后使用模型进行预测操作,具体方法如下:
1. 将需要预测的数据进行归一化处理,方法为使用之前训练数据的归一化参数进行归一化,如下:
```
input_test_normalized = mapminmax('apply', input_test, inputps);
```
2. 使用训练好的模型对归一化后的数据进行预测,如下:
```
predicted_output_normalized = sim(net, input_test_normalized);
```
3. 将预测结果反归一化,得到最终预测结果,如下:
```
predicted_output = mapminmax('reverse', predicted_output_normalized, outputps);
```
需要注意的是,在进行预测之前,需要先对输入数据进行归一化处理,然后再使用训练好的模型进行预测,最后将预测结果反归一化得到最终结果。
阅读全文