Используя кодировщик Matlab, я получаю ошибку Subscripting into an mxArray is not supported.
в следующей функции:
function net = mlpunpak(net, w)
% Check arguments for consistency
errstring = consist(net, 'mlp');
if ~isempty(errstring);
error(errstring);
end
nin = net.nin;
nhidden = net.nhidden;
nout = net.nout;
mark1 = nin*nhidden;
net.w1 = reshape(w(1:mark1), nin, nhidden);
mark2 = mark1 + nhidden;
net.b1 = reshape(w(mark1 + 1: mark2), 1, nhidden);
mark3 = mark2 + nhidden*nout;
net.w2 = reshape(w(mark2 + 1: mark3), nhidden, nout);
mark4 = mark3 + nout;
net.b2 = reshape(w(mark3 + 1: mark4), 1, nout);'
Я пробовал разные решения, которые мог найти в сети, но ни одно из них не сработало (например: использование coder.extrinsic('reshape')
, инициализация net.w1
нулями....) Кто-нибудь знает, как это исправить?
mxArray
значения (т. е. вывод внешних вызовов) в известные типы, такие какdouble
илиint32
. Этот ответ также описывает ситуацию. - person Ryan Livingston   schedule 08.05.2015mxArray
проявляется в возвращаемых значениях функций, объявленных внешними. Ответ, который он цитирует, покажет вам, как убедиться, что эти переменные правильно типизированы, чтобы вы могли их использовать. - person Tony   schedule 08.05.2015consist
любые внешние вызовы, так как это не стандартная функция MATLAB. Насколько я знаю, это единственный способ получить типы mxArray, если только в объявлениях ввода нет чего-то. В любом случае исправление, описанное в ответе @lilbill39, должно решить вашу проблему. - person Tony   schedule 08.05.2015mxArray
. Используйте отчет, чтобы проследить эту переменную до ее первого назначения, чтобы увидеть, где был введенmxArray
. Возможно, вам придется отслеживать его через вызовы функций. - person Ryan Livingston   schedule 08.05.2015w
. Так что вы можете посмотреть на это, используя отчет codegen. Возможно, чтоmxArray
вводится в функцию, вызывающуюmlpunpak
. - person Ryan Livingston   schedule 09.05.2015MAT
. Итак, запуститеsave data.mat M1
в MATLAB с определеннымM1
. Затем в вашей точке входа используйтеdata = coder.load('data.mat'); M1 = data.M1;
. Использованиеcoder.load
не требует объявленияcoder.extrinsic
. - person Ryan Livingston   schedule 09.05.2015