【问题标题】:Your fitness function must return a scalar value您的适应度函数必须返回一个标量值
【发布时间】:2016-07-21 13:35:45
【问题描述】:

我尝试使用神经网络和遗传算法进行优化。我用输入 p(4x72 矩阵) 和 目标 t(2x72 矩阵) 训练了一个神经网络。使用遗传算法重新优化,我使用神经网络的sim函数作为适应度函数。我使用的代码如下:

objFcn=@(p) sim(net,p');
%'net' is the neural network I created with p as input and t as target
[xOpt,fVal,exitflag,target]=ga(objFcn,4,[],[],[],[],LB,UB,[],options);

我提供了分别为下限和上限的 LB 和 UB。还有options,我试过了

options = gaoptimset('Vectorized','on');
% even vectorized off doesnt solve the problem

从逻辑上讲,当我在 sim 命令中使用 p' 时,结果矩阵将是 72x2,这与 GA 的总体相同。但由于某种原因,我总是收到错误消息“你的适应度函数必须返回一个标量值”。

请指导我解决这个问题。

【问题讨论】:

    标签: matlab neural-network genetic-algorithm scalar fitness


    【解决方案1】:

    “sim”函数返回一个包含网络所有输出的矩阵。您需要从中计算平方误差,以便提供一个标量值以通过 GA 最小化。

    【讨论】:

    • 你的意思是通过计算均方误差,我最终得到一个 1x1 矩阵,它显然变成了一个标量?我用just1输出试过了,我说的方法很完美。由于我正在考虑 3 个输出,我不太确定如何进行。
    • 我创建了一个函数 mse_c,代码如下: function mse_calc = mse_c(net, p, t) y=sim(net,p); mse_calc = sum((y-t).^2)/length(y); end 此函数返回一个 72x1 矩阵。但是要在 GA 中将其作为适应度函数提供,据我所知,它必须是 1x72。转置符号会在函数中呈现一些错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    相关资源
    最近更新 更多