用于多输入多输出(MIMO)系统的神经网络

时间:2013-01-24 12:52:50

标签: matlab neural-network

我想为多输入多输出(MIMO)系统构建一个神经网络,描述如下:

y1(t)= f1( x1(t), x2(t),...xn(t))
y2(t)= f2( x1(t), x2(t),...xn(t))
.....
.....
ym(t)= fm( x1(t), x2(t),...xn(t))

我读过的书描述了单输入单输出系统的例子,主要用于形式y= f(t)的函数逼近,其中神经网络被训练为输入t(自变量)和输出y。我正在使用matlab神经网络工具箱,并且可以轻松地完成对标量情况的解决方案。但是,我如何构建或解决MIMO问题?如何转换或表示输入或输出以解决matlab内置函数的问题?

1 个答案:

答案 0 :(得分:1)

首先是一个非常简单的例子:

  1. 首先,您需要为输入数据创建矩阵,为输出数据创建另一个矩阵。 在这里,我使用MATLAB的预设数据。您应该尝试使输入输出数据的结构如下:

    [InData, TarData] = engin_dataset;
    

    所以这里我们有两个输入和两个输出(MIMO)2→2

  2. 现在您应该创建网络。我选择了前馈网络:

    net1 = newff(minmax(InData),[10,2],{'tansig','purelin'},'trainlm')
    

    这里我定义了输入数据范围,每层神经元的数量(包括输出层= 2),函数类型和训练算法的类型。

  3. 现在您可以训练您的网络:

    net2 = train(net1,InData,TarData)
    
  4. 这里的代码来自MATLAB自动生成的一个示例:

    % load data
    [inputs,targets] = engin_dataset;
    %inputs = engineInputs;
    %targets = engineTargets;
    
    % Create a Fitting Network
    hiddenLayerSize = 10;
    net = fitnet(hiddenLayerSize);
    
    % Setup Division of Data for Training, Validation, Testing
    net.divideParam.trainRatio = 70/100;
    net.divideParam.valRatio = 15/100;
    net.divideParam.testRatio = 15/100;
    
    % Train the Network
    [net,tr] = train(net,inputs,targets);
    
    % Test the Network
    outputs = net(inputs);
    errors = gsubtract(targets,outputs);
    performance = perform(net,targets,outputs)
    
    % View the Network
    view(net)