Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NET汇编(未定义的函数或变量';前馈网络';)_C#_.net Assembly_Matlab_Com Interface - Fatal编程技术网

C# NET汇编(未定义的函数或变量';前馈网络';)

C# NET汇编(未定义的函数或变量';前馈网络';),c#,.net-assembly,matlab,com-interface,C#,.net Assembly,Matlab,Com Interface,我正在尝试将2010b与Visual Studio 2008 Professional集成 我有下面的MATLAB方法 function varargout = perform( func, varargin ) %% // Set default values workspaceDirectory = ['Results/MatlabWorkspace_' datestr(now, 'yyyy-mm-dd_HH-MM-SS')]; clear args args = struct('wor

我正在尝试将2010b与Visual Studio 2008 Professional集成

我有下面的MATLAB方法

function varargout = perform( func, varargin )

%% // Set default values
workspaceDirectory = ['Results/MatlabWorkspace_' datestr(now, 'yyyy-mm-dd_HH-MM-SS')];

clear args
args = struct('workspacePath', [ workspaceDirectory '/workspace.mat'], ...
              'testArray', [], ...
              'k', 50, ...
              'rate', 0.0001, ...
              'trainingDataPath', 'P2AT_LaserImageVectorList.csv', ...
              'network', 'feedforwardnet', ...
              'initialWeights', [], ...
              'divideFcn', 'dividerand', ...
              'trainRatio', 70/100, ...
              'testRatio', 15/100, ...
              'valRatio', 15/100, ...
              'trainInd', [], ...
              'testInd', [], ...
              'valInd', [], ...
              'trainFcn', 'trainlm', ...
              'performFcn', 'mse', ...
              'biasConnect', [0; 0; 0], ...
              'layerSize', [9; 4; 1], ...
              'layerTransferFcn', ['tansig '; 'tansig '; 'purelin'], ...
              'max_fail', 10, ...
              'mu_dec', 0.04, ...
              'useInitialWeights', false, ...
              'saveResults', true);

% // Returns a modified properties structure
args = getopt(args,varargin);

args.layerTransferFcn = cellstr(args.layerTransferFcn);

if args.saveResults && ~strcmpi(func,'test')
    if (exist(workspaceDirectory, 'dir') ~= 7)
        mkdir(workspaceDirectory);
    end
end

if (strcmpi(func,'test'))
    try
        load(args.workspacePath, '-regexp', '.*');
    catch err
        Warning(err.message);
        varargin{1,1} = null;
        return;
    end

    data_inputAngle = args.testArray(2501);
    data_inputPCA = args.testArray(1:2500);

    if size(data_inputPCA,1) == 1
        data_inputPCA = data_inputPCA';
    end

    switch(featureExtractionMethod)
        case {'gha','apex'}
            % // [W, errvals] = gha(data_inputPCA, k, varargin{1,3});
            data_PCs  = W' * data_inputPCA;
            data_inputNN = [data_PCs; data_inputAngle];

        case 'nnmf'
            % // [W,H,D] = nnmf(data_inputPCA',k);
            data_PCs  = H * data_inputPCA;
            data_inputNN = [data_PCs; data_inputAngle];

        case 'pcaProcess'

        otherwise
            warning = 'ERROR: no feature extraction method has been defined.';
            Warning('ERROR: no feature extraction method has been defined.');
            varargout{1,1} = null;
            return;
    end

    % // Just to test to see if it recognizes 'feedforwardnet'.
    testnet = feedforwardnet;    % // <------------------------------- LINE 81

    % // Saving all the workspace variables to see if they are all correctly processed.
    save('all');

    varargout{1,1} = net(data_inputNN); %// <------------------------- LINE 86

    end
end
因此,当我使用接口从C#运行MATLAB内部的例程时,一切都非常好:

但是当我使用.NET程序集时,它不会识别“feedforwardnet”。我曾经在第86行(
net(data\u inputNN)
)上得到一个错误。所以我添加了一行代码来测试它是否至少能识别“feedforwardnet”,但它没有

注意:我正在从一个文件中加载一些变量,其中包括“net”,它是一个神经网络(
load(args.workspacePath,'-regexp','.');

同样在MATLAB方法中,如果我从文件中加载一个保存的“网络”,然后保存它以查看它如何处理网络,它将保存为“结构”而不是“网络”

我假设它是作为一个结构加载的

我在Matlab2009b中也遇到了这个问题。这就是我现在使用Matlab2010b的原因,因为Matlab2009b显然没有这个特定的神经网络工具箱

下面是使用.NET程序集的C#代码

/*
 * Calls the method from inside a .NET assembly created with MATLAB
 * using Builder for .NET.
 */
private float MatlabTest(float[] testData, Double targetAngle)
    {
        if (testData != null)
        {
            dotnetclass AClass = new dotnetclass();

            Array X = new double[testData.Length + 1];
            testData.CopyTo(X, 0);
            X.SetValue((double)targetAngle, testData.Length);

            MWNumericArray XNumericArray = new MWNumericArray(X);

            MWArray[] RetVal = AClass.perform(1, "test",
                "workspacePath", "workspace.mat",
                "testArray", XNumericArray);

            Array result = ((MWNumericArray)RetVal[0]).ToVector(MWArrayComponent.Real);

            return (float)result.GetValue(0);
        }
        else
        {
            return 0f;
        }
    }
我在Visual Studio中遇到以下错误:

%%// Determine path names
workdir = pwd();
outdir = fullfile(workdir, 'Output');
dnetdir = fullfile(workdir, 'dotnet');

%%// Determine file names
mfile = fullfile(workdir, 'perform.m');
dnetdll = fullfile(dnetdir, 'dotnet.dll');

%%// Build .NET Assembly
eval(['mcc -N -d ''' dnetdir ''' -W ''dotnet:dotnet,' ...
        'dotnetclass,0.0,private'' -T link:lib ''' mfile '''']);
... MWMCR::EvaluateFunction error ...
Undefined function or variable 'feedforwardnet'.
Error in => perform.m at line 81.

注意:我的编译器和软件版本:

< P>编译器:微软Visual C++ 2008 SP1在<代码> C:\程序文件(x86)\微软Visual Studio 9 < /Calp>

MATLAB:R2010b(64位)

Visual Studio:MVS 2008 professional(.NET Framework 3.5 SP1)

Microsoft Windows SDK 6.1


最新更新:

我在中添加了神经网络工具箱的路径

现在我在
mccExcludeFiles.log
中得到这些消息:

C:\Program Files\MATLAB\R2010b\toolbox\nnet\nnet\@network\network.m

由C:\Program Files\MATLAB\R2010b\toolbox\nnet\nnet\nnnetwork\cascadeforwardnet.m调用 (由于工具箱可编译性规则)

C:\Program Files\MATLAB\R2010b\toolbox\nnet\nnet\@network\network.m

由C:\Program Files\MATLAB\R2010b\toolbox\nnet\nnet\nnnetwork\feedforwardnet.m调用 (由于工具箱可编译性规则)


我能想到的唯一答案(这不是问题的解决方案)是:

您将无法编译任何 训练网络的功能 (比如适应)。虽然链接没有 显式列出这些函数(如 适应),它们属于“所有其他” “命令行功能”

但是,您可以部署一个M函数 使用预先训练的 网络。我相信SIM卡的功能 会很好的

我看到的工作流程是:

  • 在MATLAB中,使用测试输入/输出训练您的网络
  • 保存网络(MAT文件?)
  • 创建一个可部署功能,然后使用预训练网络 新数据。网络本身不会 更改/调整/训练此功能
  • 编译并部署上述函数

  • 我能想到的唯一答案(这不是问题的解决方案)是:

    您将无法编译任何 训练网络的功能 (比如适应)。虽然链接没有 显式列出这些函数(如 适应),它们属于“所有其他” “命令行功能”

    但是,您可以部署一个M函数 使用预先训练的 网络。我相信SIM卡的功能 会很好的

    我看到的工作流程是:

  • 在MATLAB中,使用测试输入/输出训练您的网络
  • 保存网络(MAT文件?)
  • 创建一个可部署功能,然后使用预训练网络 新数据。网络本身不会 更改/调整/训练此功能
  • 编译并部署上述函数
  • ... MWMCR::EvaluateFunction error ...
    Undefined function or variable 'feedforwardnet'.
    Error in => perform.m at line 81.
    
    eval(['mcc -N -p ''C:\Program Files\MATLAB\R2010b\toolbox\nnet'' -d ''' dnetdir ''' -W ''dotnet:dotnet,' ...
        'dotnetclass,0.0,private'' -T link:lib -v ''' mfile '''']);