繁体   English   中英

从matlab python引擎调用matlab神经网络函数

[英]call matlab neural network function from matlab python engine

我正在尝试使用来自matlab python引擎的matlab神经网络工具箱。

例如,假设我要模仿以下示例http://uk.mathworks.com/help/nnet/ref/fitnet.html

net = fitnet(10);
net = train(net,x,t);
view(net)
y = net(x);
perf = perform(net,y,t)

然后我有以下python代码:

import numpy as np
import sys
sys.path.insert(0, '/home/donbeo/myApp/matlab_python_engine/installdir/lib/python3.4/site-packages/')




    n = 100
    x = np.linspace(-10, 10, n)
    y = x**3 + x*2 + x + np.random.normal(0, .1, n)
    plt.plot(x, y)
    plt.show()

    import matlab.engine
    eng = matlab.engine.start_matlab()
    eng.net = eng.fitnet(10.);
    eng.net = eng.train(eng.net,x,t);
    y_est = eng.net(x);

    eng.quit()

当我运行eng.net = eng.fitnet(10.);

我收到以下错误:

In [24]: ---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-24-cc577dcdc93c> in <module>()
----> 1 eng.net = eng.fitnet(10.);

/home/donbeo/myApp/matlab_python_engine/installdir/lib/python3.4/site-packages/matlab/engine/matlabengine.py in __call__(self, *args, **kwargs)
     77         else:
     78             return FutureResult(self._engine(), future, nargs, _stdout,
---> 79                                 _stderr).result()
     80 
     81     def __validate_engine(self):

/home/donbeo/myApp/matlab_python_engine/installdir/lib/python3.4/site-packages/matlab/engine/futureresult.py in result(self, timeout)
    105 
    106             self._result = pythonengine.getFEvalResult(
--> 107                 self._future,self._nargout, None, out=self._out, err=self._err)
    108             self._retrieved = True
    109             return self._result

TypeError: Unsupported datatype returned from MATLAB.

In [25]: 

我该如何解决?

编辑:

命令eng.net = eng.fitnet(10);

返回:

Error using network/subsasgn>network_subsasgn (line 553)
"layers{1}.size" must be a positive integer.

Error in network/subsasgn (line 13)
net = network_subsasgn(net,subscripts,v,netname);

Error in feedforwardnet>create_network (line 116)
      net.layers{i}.size = param.hiddenSizes(i);

Error in feedforwardnet (line 69)
    net = create_network(param);

Error in fitnet>create_network (line 98)
  net = feedforwardnet(param.hiddenSizes,param.trainFcn);

Error in fitnet (line 70)
    net = create_network(param);

---------------------------------------------------------------------------
MatlabExecutionError                      Traceback (most recent call last)
<ipython-input-29-480a6805679e> in <module>()
----> 1 eng.net = eng.fitnet(10);

/home/donbeo/myApp/matlab_python_engine/installdir/lib/python3.4/site-packages/matlab/engine/matlabengine.py in __call__(self, *args, **kwargs)
     77         else:
     78             return FutureResult(self._engine(), future, nargs, _stdout,
---> 79                                 _stderr).result()
     80 
     81     def __validate_engine(self):

/home/donbeo/myApp/matlab_python_engine/installdir/lib/python3.4/site-packages/matlab/engine/futureresult.py in result(self, timeout)
    105 
    106             self._result = pythonengine.getFEvalResult(
--> 107                 self._future,self._nargout, None, out=self._out, err=self._err)
    108             self._retrieved = True
    109             return self._result

MatlabExecutionError: 
  File /home/donbeo/myApp/MatlabR2015a/toolbox/nnet/nnet/@network/subsasgn.p, line 553, in network_subsasgn

  File /home/donbeo/myApp/MatlabR2015a/toolbox/nnet/nnet/@network/subsasgn.p, line 13, in subsasgn

  File /home/donbeo/myApp/MatlabR2015a/toolbox/nnet/nnet/nnnetwork/feedforwardnet.m, line 116, in create_network

  File /home/donbeo/myApp/MatlabR2015a/toolbox/nnet/nnet/nnnetwork/feedforwardnet.m, line 69, in feedforwardnet

  File /home/donbeo/myApp/MatlabR2015a/toolbox/nnet/nnet/nnnetwork/fitnet.m, line 98, in create_network

  File /home/donbeo/myApp/MatlabR2015a/toolbox/nnet/nnet/nnnetwork/fitnet.m, line 70, in fitnet
"layers{1}.size" must be a positive integer.


In [30]: 

在这种情况下,最好的做法是创建一个matlab函数,该函数可以执行所需的操作,然后返回它可以理解的python变量。 对于python无法理解的matlab对象,最好在每次调用matlab引擎进行操作时在matlab中控制这些对象,加载它们并将它们保存在matlab中。 其他解决方案是使用句柄对象,但这不是一个完美的解决方案,每个解决方案都有其起伏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM