2021-07-18

本文档展示了如何在MATLAB中手动实现一个2输入2输出的前向神经网络feedforwardnet,用于提高单个样本预测的效率。通过提取训练好的网络权重,并进行输入归一化和反归一化,实现与sim函数相同的预测结果,同时显著减少了计算时间。文中提供了详细的代码示例,包括网络结构、权重导入、输入处理、网络计算和结果比较。
摘要由CSDN通过智能技术生成

matlab中feedforwardnet手工实现

matlab的前向神经网络feedforwardnet训练完成后可以使用sim函数进行预测,但是sim函数在进行单个样本预测时计算时间很长,具体原因未知。将训练好的神经网络权重提取出来,进行单个样本预测,能够大大减少计算时间,但是由于train函数在训练时会将输入输出数据归一化,所以需要在手工计算时同样使用上述过程。

接下来给出具体的实现样例

首先给出样例的网络结构:
在这里插入图片描述
样例是一个2输入2输出的BP网络;包含两个隐层,第一个隐层包含10个神经元,第二个隐层包含15个神经元。训练过程不再介绍,网上有很多相关代码。

手工实现过程

话不多说,直接上代码

// 手工实现feedforwardnet
clear all;
%% 导出网络参数
load net.mat;
iw=net2.IW;
lw=net2.LW;
b=net2.b;
b1=b{1};
b2=b{2};
b3=b{3};
w1=iw{1};
w2=lw{2,1};%隐层网络权值具体放在哪个元组下可以直接在变量区点击查看,我这里是(2,1)和(3,2)
w3=lw{3,2};
%% 设置测试值
x=[0.3;0.5];
x_in=mapminmax('apply',x,net2.inputs{1}.processSettings{1});%输入归一化
%% 使用网络权重得计算值
v11=w1*x_in+b1;
v12=tansig(v11);
v21=w2*v12+b2;
v22=tansig(v21);
v31=w3*v22+b3;
v32=purelin(v31);%实际网络输出
v_out=mapminmax('reverse',v32,net2.outputs{3}.processSettings{1});% 反归一化后网络输出
%% 直接仿真值
sim_out=sim(net2,x);
%% 查看差值
sim_out-v_out

经过测试,仿真输出和手工输出相同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值