【发布时间】:2015-07-07 18:42:46
【问题描述】:
我正在尝试使用 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]:
【问题讨论】:
-
尝试传递一个整数 (10) 而不是浮点数 (10.)
-
我得到了另一种错误。我尝试了各种组合,但我认为问题在于 fitnet 返回一个 python 无法读取的变量,我不确定应该如何处理
-
作业左侧有参考吗?以这种方式分配工作区变量:de.mathworks.com/help/matlab/matlab_external/…
-
即使这样也行不通。还有其他选择吗?
标签: python matlab matlab-engine