Matlab BP神经网络工具箱之feedforwardnet使用小结

  • 关于什么是BP网络和用来干什么的我就不再赘述了,网上有很多,这里只说明一下如何使用matlab神经网络工具箱中的feedforwardnet神经网络(原newff神经网络)。
  • matlab版本R2017b
  • 由于matlab的更新,官方不再推荐使用newff来训练了,所以对feedforwardnet的使用做下总结。
  • 在使用feedforwardnet训练时,不需要对训练前的数据进行归一化处理,我没有单独去查看feedforwardnet归一化用的什么方法,但是通过后期的表达式提取过程来看,应该使用的是mapminmax函数进行的数据归一化和反归一化。
  • 直接贴出matlab代码
function C_net_BP01
    u_hebing=textread('u_hebing.txt');
    f_hebing=textread('f_hebing.txt');
    %数据验证===============================================================
    data16test=textread('val_in_03_all_fifth.txt','%s');
    data16to2test=hex2dec(data16test)';
    Changdu16to2test=length(data16to2test);
    lietest=Changdu16to2test/6;
    grouptest=zeros(lietest,6);
    for itest=1:lietest
        grouptest(itest,:)=data16to2test(6*itest-5:6*itest);
    end
    data_read0test=textread('standard_reading_03_all_fifth.txt');
    jiequ_n=96;jiequ_m=121;%截取行数96-121比较匹配
    u_jiequ=grouptest(jiequ_n:jiequ_m,:);
    f_jiequ=data_read0test(jiequ_n:jiequ_m,1:6);
    for iitest=1:(jiequ_m-jiequ_n+1)/2
        u_chazhitest(iitest,:)=u_jiequ(2*iitest,:)-u_jiequ(2*iitest-1,:);
        f_chazhitest(iitest,:)=f_jiequ(2*iitest,:)-f_jiequ(2*iitest-1,:);
    end
    % 归一化处理==============================================
    [u_guiyi,u_guiyi_ps]=mapminmax(u_hebing.');
    [f_guiyi,f_guiyi_ps]=mapminmax(f_hebing.');
    u_guiyi_test=mapminmax('apply',u_chazhitest.',u_guiyi_ps);
    f_guiyi_test=mapminmax('apply',f_chazhitest.',f_guiyi_ps);
    %训练BP神经网络=========================================================
    net=feedforwardnet(3,'trainlm');
    view(net)
    net=train(net,u_hebing.',f_hebing.');
    view(net)
    f_wucha=net(u_hebing.');
    perf=perform(net,f_wucha,f_hebing.')
    save 'C_net_BP01' net
    %带入BP神经网络
    f_out=sim(net,u_chazhitest.').';
    %网络权值阈值矩阵=======================================================
    b1=net.b{1};
    iw=net.iw{1,1};
    b2=net.b{2};
    lw=net.lw{2,1};
    %离线神经网络表达式
    f_offline_guiyi=(purelin(lw*tansig(iw*u_guiyi_test+b1)+b2));
    f_offline=mapminmax('reverse',f_offline_guiyi,f_guiyi_ps).';
end
  • 在归一化处理之前,都是对数据的读取与处理过程。
  • 输入的训练数据是n行6列(n为样本个数),但是当训练神经网络时,列数被当作样本个数,所以需要转置处理。
  • 输入的目标训练数据格式与输入训练数据相同
  • 所以该网络是多(6)输入多(6)输出的神经网络
  • BP神经网络可以通过训练得到权值阈值,由于可以将表达式提取出来,在后期离线使用时,可以脱离matlab环境,在任意语言(比如C语言)中实现离线仿真,所以对嵌入式系统是比较友好的。
  • 为什么不使用性能比较优秀的RBF径向基神经网络,因为本人能力有限,训练完RBF后,没有找到相关RBF的显式表达式,所以训练结果无法在其他设备上直接使用。(如果有大神能够实现,希望讨论一下,谢谢!)
  • 题外话,据说支持神经网络的嵌入式系统要来了?

你可能感兴趣的:(Matlab深度学习)