我正在尝试使用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]:
答案 0 :(得分:0)
在这种情况下,最好的办法是创建一个matlab函数,它可以执行所需的操作,然后返回到可以理解的python变量。使用python无法理解的matlab对象最好在matlab中控制对象,每次调用matlab引擎进行操作时加载它们并将它们保存在matlab中。其他解决方案是使用句柄对象,但这不是一个完美的解决方案,每个解决方案都有其起伏。