A. Matlab AI 工具箱算法转C code
在进行MATLAB AI工具箱算法向C代码转换的过程中,我们首先需要在MATLAB软件中利用神经网络拟合(Neural Net Fitting)工具箱训练一个神经网络模型。在导入训练数据时,我们通常需要几行代码,使用readtable()函数读取存储在Excel中的数据,并提取因变量Y与自变量X备用。需要注意的是,如果有多个自变量(例如data_NDVI与data_Soil),需要将这些自变量合并为一个变量X。
接着,通过MATLAB软件顶部菜单选择“APP”→“Neural Net Fitting”,打开神经网络拟合工具箱。在打开的界面中,选择“Next”进入数据筛选界面。此界面用于选择输入数据(自变量)和输出数据(因变量),并使用鼠标在MATLAB软件的工作区中找到对应的变量。在数据筛选完成之后,需要对数据维度进行选择,以确定输入与输出数据矩阵中,不同行代表的是不同样本还是同一样本的不同属性。
点击选择数据后,进入验证集与测试集数据划分界面。在这里,我们需为验证集与测试集数据设定比例,一般情况下,数据量较少时按照6:2:2比例划分,数据量较大时可以采用98:1:1比例。具体划分比例应根据实际情况来确定。
随后,进入神经网络结构配置界面,配置隐藏层的神经元数量。隐藏层数量默认为1层且不能修改,建议先填写10个神经元数量,后期根据模型精度和运行时间进行调整。点击“Next”进入神经网络模型训练界面,选择训练算法,通常推荐使用Levenberg-Marquardt算法。模型训练完毕后,会弹出训练结果窗口,展示精度评定指标和拟合情况图。
如果对模型不满意,可以重复训练、调整隐藏层神经元数量、修改数据集等,以完善模型。训练完成后,点击“Next”进入模型调整界面,继续优化模型。点击“Next”进入解决方案部署界面,这里可以将训练好的神经网络模型以不同形式导出,生成MATLAB代码或保存关键参数。选择生成MATLAB代码,以方便后续训练和调用。
步骤2涉及保存训练后的模型函数,生成一个新的文件。步骤3则将模型函数转换为C语言代码。为了确保转换成功,需要在coder中测试生成的C语言代码。通过定义输入量(例如1*6一组特征值),运行检查,确保生成的C语言代码与MATLAB测试结果一致。
整个流程结束后,通过命令行输入“coder”,选择要转换的模型函数(例如AfterTrained_MmyNeuralNetworkFunction),定义输入量类型,运行测试,确保代码生成无误,最后选择C语言进行代码生成。
通过上述步骤,我们成功地将MATLAB AI工具箱算法转换为C代码,实现了从模型训练到代码生成的完整流程。
B. 一个关于BP神经网络的问题,matlab中神经网络工具箱的初始权值和阀值是
训练BP神经网络所采取的随机初始参数确实是随机的,在训练过程中这些参数和权值都会朝着同一个大方向进行修正。例如你用BP神经网络来拟合曲线,找到输入值与输出值之间的线性规律,那么在训练的过程中这个拟合的曲线会不断的调整其参数和权值直到满足几个预设条件之一时训练停止。虽然这个训练出来的结果有时候会有一定误差,但都在可以接受的范围内。
缩小误差的一个方法是需要预先设置初始参数,虽然每次依然会得到不一样的模型(只要参数是随机修正的),但不同模型之间的差距会很小。另外可以反复训练,找到一个自己觉得满意的模型(可以是测试通过率最高,可以是平均结果误差值最小)。
至于你说别人怎么检查你的论文结果,基本上都是通过你的算法来重建模型,而且还不一定都用matlab来做,即便是用同样的代码都会出现不同的结果,何况是不同的语言呢?其实验算结果最重要的是看测试时的通过率,例如在对一组新的数据进行测试(或预测)时,通过率达到95%,别人用其他的方式重建了你的模型也得到这样的通过率,那么你的算法就是可行的。注意,在计算机专业的论文里面大家看重的不是代码,而是算法。
补充一点:只要你训练好了一个神经网络可以把这个神经网络以struct形式保存,这样这个网络可以被反复使用,且每次对同一组测试数据的预测结果都会一样。你也可以当做是检测论文可行性的工具。
C. MATLAB神经网络拟合工具箱Neural Net Fitting实现回归预测
本文讲解在MATLAB软件中利用神经网络拟合(Neural Net Fitting)工具箱实现回归预测的具体方法。首先,导入数据时通过readtable()函数从Excel读取数据,随后将因变量Y与自变量X准备就绪。对于多个自变量,需合并放置于单一变量X中。
接着,运行MATLAB软件并选择“APP”→“Neural Net Fitting”打开工具箱。在“Neural Network Start”界面,选择输入与输出数据。通过鼠标在MATLAB工作区找到对应变量,确保数据维度正确设置。
继续点击“Next”,进入数据集划分界面。在此选择验证集与测试集比例,一般数据量少时采用6:2:2比例,数据量大时则为98:1:1,依据实际情况调整。
接着,点击“Next”进入神经网络结构配置界面。仅能配置隐藏层神经元数量,默认为1层,不能修改。对于隐藏层数量,建议先填写默认值10,根据模型精度与运行时间进行二次调整。
点击“Next”后,进入神经网络模型训练界面。选择训练算法,提供三种选项:Levenberg-Marquardt算法、Bayesian regularization算法、Scaled conjugate gradient backpropagation算法。结合数据特性,一般优先选择Levenberg-Marquardt算法。
训练模型后,界面显示训练结果窗口与精度评定指标数值。如对模型不满意,可多次重复训练并调整参数重新构建模型。若模型基本满意,点击“Next”进入模型调整界面,可进一步优化模型。
继续点击“Next”,进入解决方案部署界面。此界面提供代码生成、关键参数保存等功能。选择“Generate Scripts”自动生成MATLAB代码,简化后续模型训练。在“Save Data to Workspace”中保存模型参数,以便未来直接调用模型。
保存完毕后,点击“Finish”退出神经网络拟合工具箱。系统若未保存任何代码或参数,会弹出提示确认退出。
D. matlab神经网络工具箱训练出来的函数,怎么输出得到函数代码段
这样:
clear;
%输入数据矩阵
p1=zeros(1,1000);
p2=zeros(1,1000);
%填充数据
for i=1:1000
p1(i)=rand;
p2(i)=rand;
end
%输入层有两个,样本数为1000
p=[p1;p2];
%目标(输出)数据矩阵,待拟合的关系为简单的三角函数
t = cos(pi*p1)+sin(pi*p2);
%对训练集中的输入数据矩阵和目标数据矩阵进行归一化处理
[pn, inputStr] = mapminmax(p);
[tn, outputStr] = mapminmax(t);
%建立BP神经网络
net = newff(pn, tn, [200,10]);
%每10轮回显示一次结果
net.trainParam.show = 10;
%最大训练次数
net.trainParam.epochs = 5000;
%网络的学习速率
net.trainParam.lr = 0.05;
%训练网络所要达到的目标误差
net.trainParam.goal = 10^(-8);
%网络误差如果连续6次迭代都没变化,则matlab会默认终止训练。为了让程序继续运行,用以下命令取消这条设置
net.divideFcn = '';
%开始训练网络
net = train(net, pn, tn);
%训练完网络后要求网络的权值w和阈值b
%获取网络权值、阈值
netiw = net.iw;
netlw = net.lw;
netb = net.b;
w1 = net.iw{1,1}; %输入层到隐层1的权值
b1 = net.b{1} ; %输入层到隐层1的阈值
w2 = net.lw{2,1}; %隐层1到隐层2的权值
b2 = net.b{2} ; %隐层1到隐层2的阈值
w3 = net.lw{3,2}; %隐层2到输出层的权值
b3 = net.b{3} ;%隐层2到输出层的阈值
%在默认的训练函数下,拟合公式为,y=w3*tansig(w2*tansig(w1*in+b1)+b2)+b3;
%用公式计算测试数据[x1;x2]的输出,输入要归一化,输出反归一化
in = mapminmax('apply',[x1;x2],inputStr);
y=w3*tansig(w2*tansig(w1*in+b1)+b2)+b3;
y1=mapminmax('reverse',y,outputStr);
%用bp神经网络验证计算结果
out = sim(net,in);
out1=mapminmax('reverse',out,outputStr);
注意事项
一、训练函数
1、traingd
Name:Gradient descent backpropagation (梯度下降反向传播算法 )
Description:triangd is a network training function that updates weight and bias values according to gradient descent.
2、traingda
Name:Gradient descentwith adaptive learning rate backpropagation(自适应学习率的t梯度下降反向传播算法)
Description:triangd is a network training function that updates weight and bias values according to gradient descent with adaptive learning rate.it will return a trained net (net) and the trianing record (tr).
3、traingdx (newelm函数默认的训练函数)
name:Gradient descent with momentum and adaptive learning rate backpropagation(带动量的梯度下降的自适应学习率的反向传播算法)
Description:triangdx is a network training function that updates weight and bias values according to gradient descent momentumand an adaptive learning rate.it will return a trained net (net) and the trianing record (tr).
4、trainlm
Name:Levenberg-Marquardtbackpropagation(L-M反向传播算法)
Description:triangd is a network training function that updates weight and bias values according toLevenberg-Marquardt optimization.it will return a trained net (net) and the trianing record (tr).
注:更多的训练算法请用matlab的help命令查看。
二、学习函数
1、learngd
Name:Gradient descent weight and bias learning function(梯度下降的权值和阈值学习函数)
Description:learngd is the gradient descentweight and bias learning function, it willreturn theweight change dWand a new learning state.
2、learngdm
Name:Gradient descentwith momentumweight and bias learning function(带动量的梯度下降的权值和阈值学习函数)
Description:learngd is the gradient descentwith momentumweight and bias learning function, it willreturn the weight change dW and a new learning state.
注:更多的学习函数用matlab的help命令查看。
三、训练函数与学习函数的区别
函数的输出是权值和阈值的增量,训练函数的输出是训练好的网络和训练记录,在训练过程中训练函数不断调用学习函数修正权值和阈值,通过检测设定的训练步数或性能函数计算出的误差小于设定误差,来结束训练。
或者这么说:训练函数是全局调整权值和阈值,考虑的是整体误差的最小。学习函数是局部调整权值和阈值,考虑的是单个神经元误差的最小。
它的基本思想是学习过程由信号的正向传播与误差的反向传播两个过程组成。
正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出(教师信号)不符,则转入误差的反向传播阶段。
反向传播时,将输出以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。
E. MATLAB中GUI工具箱中的nntool 和nftool
nftool - 神经网络的拟合工具
nntool - 神经网络工具箱的图形用户界面。