我怎么能使用遗传算法(GA)在神经网络训练神经网络工具箱?

263(30天)

接受的答案

MathWorks支万博1manbetx持团队
编辑:MathWorks支万博1manbetx持团队 2020年11月5日
设置算法的能力遗传算法火车功能目前不是直接用于神经网络工具箱(如R2017a至少)。
为了解决这个问题,使用下面的步骤使用遗传算法优化神经网络。
“遗传算法”功能需要一个函数句柄作为输入参数,它通过1 xn向量,其中N是变量的数量在系统优化。
神经网络,重量和偏见是一个mx₁向量。这些可能是优化使用“遗传算法”。
可以编写一个函数来接受网络,重量和偏见,输入和目标。这个函数可以返回基于输出的均方误差和目标“遗传算法”需要一个函数处理,只有返回标量值。
以下代码示例描述了均方误差函数返回给定输入的重量和偏见,一个网络,它的输入和目标。
函数mse_calc = mse_test (x,净、输入目标)
% ' x '包含重量和偏见向量
%的行向量形式传递给它的
%遗传算法。这个必须转置
%的时候被设置为重量和偏见
%的向量网络。
%
%的重量和偏见向量
%一个作为输入
网= setwb(净,x ');
%
%来评估基于给定的输出
%重量和偏见向量
y =净(输入);
%
%计算均方误差
mse_calc = ((y-targets) ^ 2)之和/长度(y);
结束
以下代码示例描述了一个单独的脚本,建立一个基本的神经网络问题和处理传递给函数的定义“遗传算法”。它使用上面的计算均方误差函数。\ n
% %神经网络初始化问题
%
%为神经网络的输入
输入= (1:10);
%为神经网络的目标
目标= cos(输入。^ 2);
%
%的神经元数量
n = 2;
%
%建立一个神经网络
网= feedforwardnet (n);
%
%配置数据集的神经网络
网=配置(净、输入目标);
%
% MSE_TEST创建句柄函数
%计算均方误差
h = @ (x) mse_test (x,净投入,目标);
%
%设置遗传算法对
%最小变化适应度函数
% 1 e-8终止算法和显示
%每个迭代的结果。
ga_opts = gaoptimset (“TolFun”1 e-8“显示”,“通路”);
%
%请注意:对于一个前馈网络
% n神经元,数量3 n + 1是必需的
%的重量和偏见列向量。
%
% a . n的输入权值
% b . n的输入偏差
% c, n为输出权重
% d。1为输出的偏见
%
%运行遗传算法所需的选项
[x_ga_opt, err_ga] = ga (h, 3 * n + 1, ga_opts);
请注意,上面的例子中使用了
,这是在R2010b首次引入。
10评论
Alwala阿摩司
Alwala阿摩司 2022年11月30日
你好,
与多输入这个代码示例。你可以改变的 遗传算法 speciies数量的参数。例如如下使用p计算网络参数的实际数量 网=火车(净、输入目标)
%计算实际数量的参数初始化网络
X0 = formwb(网,net.b, net.IW net.LW);%或X0 = getwb(净);或X0 = getx(净);
p =元素个数(X0);
x_opt = ga (obj_func p ga_options)
方程3 n + 1总是在这种情况下7 n = 2。然而净白平衡一个多输入的数量将会改变。
问候

登录置评。

更多的答案(12)

迈克尔
迈克尔 2014年7月11日
嗨。谢谢你的答案。
让我看看我理解。通过执行这个函数ga最后,“网”将被优化的均方误差最小化吗?
最好的,迈克
9日评论
merve ulku
merve ulku 2021年4月12日
你好MatWorks团队,我有3个x28输入和1 x28目标。它ı改变这个代码如何工作?我的下面的代码;
ı想决定优化3值我的目标…
%为神经网络的输入
输入= xlsread (“myinputs.xlsx”);
%为神经网络的目标
目标= xlsread (“mytargets.xlsx”);
%的神经元数量
n = 2;
%建立一个神经网络
网= feedforwardnet (n);
%配置数据集的神经网络
网=配置(净、输入目标);
% MSE_TEST创建句柄函数
%计算均方误差
h = @ (x) mse_test (x,净投入,目标);
%设置遗传算法对
%最小变化适应度函数
% 1 e-8终止算法和显示
%每个迭代的结果。
ga_opts = gaoptimset ( “TolFun” 1 e-8 “显示” , “通路” );
%请注意:对于一个前馈网络
% n神经元,数量3 n + 1是必需的
%的重量和偏见列向量。
%
% a . n的输入权值
% b . n的输入偏差
% c, n为输出权重
% d。1为输出的偏见
%运行遗传算法所需的选项
[x_ga_opt, err_ga] = ga (h, 3 * n + 1, ga_opts);
函数 mse_calc = mse_test (x,净、输入目标)
% ' x '包含重量和偏见向量
%的行向量形式传递给它的
%遗传算法。这个必须转置
%的时候被设置为重量和偏见
%的向量网络。
%的重量和偏见向量
%一个作为输入
网= setwb(净,x ');
%来评估基于给定的输出
%重量和偏见向量
y =净(输入);
%计算均方误差
mse_calc = ((y-targets) ^ 2)之和/长度(y);
结束
请分享正确的代码,非常感谢您的帮助。

登录置评。


epic
epic 2017年6月7日
MathWorks发布的代码支持团队于2013年10月18万博1manbetx日抛出一个错误如果你把它放在一个文件并按原样运行它,因为函数定义在脚本。为了修复它,你只需要把函数定义。这是一个修正版本,似乎工作好。只是将它粘贴到MATLAB编辑器,点击Run按钮。
% %神经网络初始化问题
%为神经网络的输入
输入= (1:10);
%为神经网络的目标
目标= cos(输入。^ 2);
%的神经元数量
n = 2;
%建立一个神经网络
网= feedforwardnet (n);
%配置数据集的神经网络
网=配置(净、输入目标);
% MSE_TEST创建句柄函数
%计算均方误差
h = @ (x) mse_test (x,净投入,目标);
%设置遗传算法对
%最小变化适应度函数
% 1 e-8终止算法和显示
%每个迭代的结果。
ga_opts = gaoptimset (“TolFun”1 e-8“显示”,“通路”);
%请注意:对于一个前馈网络
% n神经元,数量3 n + 1是必需的
%的重量和偏见列向量。
%
% a . n的输入权值
% b . n的输入偏差
% c, n为输出权重
% d。1为输出的偏见
%运行遗传算法所需的选项
[x_ga_opt, err_ga] = ga (h, 3 * n + 1, ga_opts);
函数mse_calc = mse_test (x,净、输入目标)
% ' x '包含重量和偏见向量
%的行向量形式传递给它的
%遗传算法。这个必须转置
%的时候被设置为重量和偏见
%的向量网络。
%的重量和偏见向量
%一个作为输入
网= setwb(净,x ');
%来评估基于给定的输出
%重量和偏见向量
y =净(输入);
%计算均方误差
mse_calc = ((y-targets) ^ 2)之和/长度(y);
结束
5个评论
卡洛琳
卡洛琳 2020年9月18日
编辑:卡洛琳 2020年9月18日
我刚刚开始使用神经网络和我想我理解的理论,但我不知道如何在实践中应用它。我做了这个典范的例子,结果不匹配函数,为什么?
网= setwb(净,x_ga_opt);
网。trainFcn =“trainlm”;
net1 =火车(净、输入目标);
w1 = net1(目标);
w1情节(输入)
抓住
情节(输入,目标);
我能做些什么来匹配结果的函数?

登录置评。


anurag kulshrestha
anurag kulshrestha 2015年5月3日
上面的代码在Matlab R2010a已经过时了。这个代码不是安的均方误差函数最小化。
7评论
格雷格·希斯
格雷格·希斯 2017年5月17日
如果你搜索
格雷格遗传
和/或
格雷格遗传算法
你会发现我不能找到一个好的工作的例子ga的MATLAB函数。
如果你成功了,请发布
在新闻组和发布一个参考答案。
希望这个有帮助。
格雷格

登录置评。


凯拉什sahw肖
凯拉什sahw肖 2017年6月21日
让我们清楚一些人指出逻辑GA用于更新NN的重量
之前我们学习了,体重继续更新更好的优化的回答。但是重量是固定的,因为他们只是改变他们的位置……所以怎么能保证这将导致优化回答最初的重量是随机的。一旦随机值分配然后我们不改变,我们就改变的位置值倍增……
这意味着每一个备选时间你跑你会得到不同的结果…

格雷格·希斯
格雷格·希斯 2017年6月21日
>让我们清楚一些人指出逻辑GA用于更新重量的NN >之前我们学习了,体重继续更新更好>优化的回答。
因为在每个阶段吗,许多创建随机集的候选人
之前一是发现,减少错误。那组权重被接受
多个随机的搜索仍在继续。
>但重量是固定的,因为他们只是改变他们的位置……
没有!绝对不是!
>所以怎么能保证这将导致优化回答最初的重量是随机的。
不。你做不懂。
1。所有的重量是随机改变
2。的计算产生的误差
3所示。如果新的错误不低于现有的错误,新组
权重被丢弃和算法步骤1。
4所示。如果新的误差低于现有的误差,新组
权重被接受。
一个。如果新的误差较小或等于目标算法
终止。
b。如果新的错误不是小或等于目标,算法
回到步骤1。
>一旦随机值分配然后我们不改变,我们就改变>的位置值倍增……
不。
>这意味着每交替时间你跑你会得到不同的结果…
是:保持发电机组的重量,直到一个降低了错误。
接受设置。如果最后错误已经达到了你完成的目标。
否则重新开始与产生更多randon集。
希望这个有帮助。
谢谢你的正式接受我的答案
格雷格

艾哈迈德阿里
艾哈迈德阿里 2017年9月20日
我能够运行该算法使用多个输入我只需要更改代码的输入的新计算Y然而代码使用一个简单的for循环运行时间太长,我不知道如何优化它,任何一个有一个想法就如何增加代码的速度?我有1920 * 1920 * 1的输入和输出

约瑟夫·里贝罗
约瑟夫·里贝罗 2017年11月20日
我用Matlab R2010b。不为我工作的代码。它抛出错误在我。任何方式我可以工作吗?
谢谢,约瑟夫

约瑟夫·里贝罗
约瑟夫·里贝罗 2017年11月21日
亲爱的格雷格,我将感激如果GA可以集成到“脂肪”的代码就是一个例子我可以跟随它更好。这是因为我又试了一下代码作为两个单独的m-files(因为我使用R2010b版本)和它的工作原理。然而,我亏本,到底我应该插入的代码GA脚本。
如果任何人有试过,我将感激如果可以粘贴在这里。
谢谢。
约瑟夫
1评论
格雷格·希斯
格雷格·希斯 2017年12月2日
请不要滥用答案框。显然,你没有最初的问题的答案。
我已经发布修订的MATLAB遗传算法的代码。
检查新闻组和答案。
希望这有助于
格雷格

登录置评。



氮化镓xiedang
氮化镓xiedang 2019年11月2日
上面的代码在Matlab R2016b已经过时了。这个代码不是安的均方误差函数最小化。
2的评论
名
2020年6月11日
请让我知道最后:上面的代码是正确的学习或者是不正确的?
请让我知道。
国会议员

登录置评。


eakandar阿巴斯
eakandar阿巴斯 2021年5月3日
屏蔽罩彩色图像加密通过使用遗传算法和神经网络可以得到simulatin运行的代码

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!