0

我想让 N 个并行神经网络使用相同的输入参数并排工作。所以我决定先从 2 个神经网络开始,在下一轮推广到 N。

为此,我创建了一个函数getUntrainedNet,如下所示:

function [net] = getUntrainedNet()
%GETUNTRAINEDNET Summary of this function goes here
%   Detailed explanation goes here

% Choose a Training Function
% For a list of all training functions type: help nntrain
% 'trainlm' is usually fastest.
% 'trainbr' takes longer but may be better for challenging problems.
% 'trainscg' uses less memory. Suitable in low memory situations.
trainFcn = 'trainlm';  % Levenberg-Marquardt backpropagation.

% Create a Fitting Network
hiddenLayerSize = 30;
net = fitnet(hiddenLayerSize,trainFcn);
end

接下来我创建了一个nets神经网络对象的元胞数组:

nets = cell(1,lengthTargets);
nets(:) = {getUntrainedNet()};

lengthTargets来自哪里:

Targets = [experiments.TargetOne; experiments.TargetTwo];
lengthTargets = size(Targets,1);

然后用以下方法训练神经网络:

nets{k} = trainNet(nets{k}, experimentCoordinates, Targets(k,:));

为了使用称为 的多目标优化方法检测最佳操作点gamultiobj,我使用以下成本函数:

costFunction = @(varargin) [nets{1}(varargin{:}'), nets{2}(varargin{:}')];

但相反,我想将varargin{:}'参数应用于单元阵列中存​​在的所有神经网络对象,而不必通过其索引器指定每个网络以使计算通用。

1)如何在这里做到这一点?

获得最佳坐标后,我想将最佳坐标的参数应用于元胞数组中的每个神经网络对象。

目前正在通过以下方式完成:

bestCoordinatesTargetOne = nets{1}(bestCoordinates);
bestCoordinatesTargetTwo = nets{2}(bestCoordinates);

2)如何在不索引每个单元格以使计算通用的情况下在这里执行此操作?

4

1 回答 1

0

根据@Wolfie 的评论,我将成本函数更新为:

costFunction = @(varargin) cell2mat(cellfun(@(net) net(varargin{:}'), nets, 'UniformOutput',false));

并且优化通过了。

并计算最佳坐标目标:

bestCoordinatesTargets = cellfun(@(net) net(bestCoordinates), nets, 'UniformOutput',false);
于 2017-12-11T13:24:13.297 回答