四、进行预测
保存结果后,我们的工作区中出现了net,output,error(残差)。
现在我们就可以通过函数sim来进行预测,把要预测的10组数据的输入拿进来:
Predict_Y=zeros(10,1); % 初始化,提高运行速度 for i=1:10 % 有10行 Predict_Y(i,1)=sim(net,Predict_X(i,:)'); % 这里注意需要转置 end % 成功得到预测值
在命令行窗口输入以下命令调用查看输出值Y:
disp(Predict_Y)
五、后记
关于所使用到的Excel、Matlab技巧和神经网络的相关技巧心得
1、关于快速选取Excel文件中的数据
Ctrl+方向键:如“Ctrl+↑”是快速到达表格的最顶端。
取消选择需保证当前位置是空单元格,按下快捷键Ctrl+D。
Ctrl+Shift+方向键:如“Ctrl+Shift+→”是快速选取这一行的内容,“Ctrl+Shift+↓”是选取右下的内容。
2、将临时变量转换为mat文件保存
我们知道,如果每次都输出X和Y相当浪费时间,因此我们可以用文件形式保存。在工作区手动右键删除掉不需要的变量后将其保存为mat文件:
文件会默认保存在当前文件夹下,这时我们用load命令就可以直接导入数据:
3、生成的神经网络的w和b在哪里找?
还是先对数据进行训练:
这里选择rows的原因是,完整的一行代表一组数据,输入和输出在同一行上。
数据集一般占比70%或80%
训练完成后,进入以上界面。其中,Validation Checks代表泛化性。
需要注意的是,如果在训练过程中MSE(均方误差)不降反增,Validation Checks就自增1;当默认达到6次时,迭代终止。
Epoch代表完成训练的次数,这里我们可以看到在第8次就完成了训练。
当Performance和Gradient不再增加时,就代表完成了训练。
通过“Performance”我们可以看到:在第4次迭代时MSE最小,此时的MSE为0.70971。
在这个函数中,我们可以看到b和w。
由于隐藏层的个数是10,b1的个数就是10。
由于一共有401个输入,那么IW_1的个数就是10*401。
4、如何生成预测值
第一个方法是之前用过的sim仿真函数。
第二个方法是使用我们生成的函数,但要注意把第二、三个参数删除(删掉选中部分)。
随机生成一组数据验证一下(rand函数生成的值在[0,1]之间,这里只是举个例子):
用我们生成的函数也是可以进行预测的。
5、怎么预测多输入多输出问题?
这里没有很好的数据,所以matlab自带的数据集来做演示:
在这个数据集中input是14 * 4208,output是3 * 4208。即3个输出,14个输入,一共有4208组;这时完整的一列代表一组数据,所以选择matrixcolumn。
因为工作区已经有我们刚刚生成的net,所以这里生成的是net1。
我们再随机生成一组数据来预测。由于这里B的列数等于输入向量的个数,因此无需再转置,最后得到的结果如ans所示:
B=rand(14,5);是5组数据的意思,每组数据14个输入,返回5组3个输出值。
6、资源获取(项目相关代码和光谱分析数据表格xlsx)
项目相关代码和光谱分析数据表格xlsx如有需要,可私信我免费分享。希望这篇博文能帮助到你!