Функция genFunction обеспечивает автономные функции MATLAB ® для обученной неглубокой нейронной сети. Созданный код содержит всю информацию, необходимую для моделирования нейронной сети, включая настройки, значения веса и смещения, функции модуля и вычисления.
Сгенерированная функция MATLAB может использоваться для проверки точных расчетов моделирования, выполняемых конкретной неглубокой нейронной сетью, и упрощает развертывание нейронных сетей для многих целей с помощью широкого спектра продуктов и инструментов для развертывания MATLAB.
Функция genFunction вводится на панелях развертывания в инструментах nftool, nctool, nprtool и ntstool. Сведения об этих функциях инструмента см. в разделах Подбор данных с неглубокой нейронной сетью, Классификация шаблонов с неглубокой нейронной сетью, Кластерные данные с самоорганизующейся картой и Неглубокая нейронная сеть с предсказанием и моделированием временных рядов.

Расширенные сценарии, созданные на панели Сохранить результаты каждого из этих инструментов, включают пример развертывания сетей с genFunction.
Функция genFunction генерирует автономную функцию MATLAB для моделирования любой обученной неглубокой нейронной сети и подготовки ее к развертыванию. Это может быть полезно для нескольких задач:
Документирование преобразований «вход-выход» нейронной сети, используемой в качестве шаблона расчета для повторных реализаций сети вручную
Используйте функциональный блок MATLAB для создания блока Simulink ®
Используйте Compiler™ MATLAB для:
Создание автономных исполняемых файлов
Создание надстроек Excel ®
Используйте SDK™ компилятора MATLAB для:
Создание библиотек C/C + +
Создание компонентов .COM
Создание компонентов Java ®
Создание компонентов .NET
Используйте Coder™ MATLAB для:
Создать код C/C + +
Создание эффективных MEX-функций
genFunction(net,'pathname') принимает нейронную сеть и путь к файлу и создает автономный файл функции MATLAB filename.m.
genFunction(...,'MatrixOnly','yes') переопределяет представление ячейки/матрицы по умолчанию и вместо этого генерирует функцию, использующую только аргументы матрицы, совместимые с инструментами кодера MATLAB. Для статических сетей столбцы матрицы интерпретируются как независимые выборки. Для динамических сетей столбцы матрицы интерпретируются как последовательность временных шагов. Значение по умолчанию: 'no'.
genFunction(___,'ShowLinks','no') отключает поведение по умолчанию при отображении ссылок на созданную справку и исходный код. Значение по умолчанию: 'yes'.
Здесь обучается статическая сеть и вычисляются ее выходы.
[x, t] = bodyfat_dataset; bodyfatNet = feedforwardnet(10); bodyfatNet = train(bodyfatNet, x, t); y = bodyfatNet(x);
Следующий код генерирует, тестирует и отображает функцию MATLAB с тем же интерфейсом, что и нейронный сетевой объект.
genFunction(bodyfatNet, 'bodyfatFcn'); y2 = bodyfatFcn(x); accuracy2 = max(abs(y - y2)) edit bodyfatFcn
Новую функцию можно скомпилировать с помощью инструментов компилятора MATLAB (требуется лицензия) в общую/динамически связанную библиотеку с помощью mcc.
mcc -W lib:libBodyfat -T link:lib bodyfatFcn
Следующий код генерирует другую версию функции MATLAB, которая поддерживает только аргументы матрицы (без массивов ячеек). Эта функция тестируется. Затем используется для генерации MEX-функции с помощью инструмента MATLAB Coder codegen (требуется лицензия), который также тестируется.
genFunction(bodyfatNet, 'bodyfatFcn', 'MatrixOnly', 'yes'); y3 = bodyfatFcn(x); accuracy3 = max(abs(y - y3)) x1Type = coder.typeof(double(0), [13, Inf]); % Coder type of input 1 codegen bodyfatFcn.m -config:mex -o bodyfatCodeGen -args {x1Type} y4 = bodyfatCodeGen(x); accuracy4 = max(abs(y - y4))
Здесь обучается динамическая сеть и вычисляются ее выходы.
[x,t] = maglev_dataset;
maglevNet = narxnet(1:2,1:2,10);
[X,Xi,Ai,T] = preparets(maglevNet,x,{},t);
maglevNet = train(maglevNet,X,T,Xi,Ai);
[y,xf,af] = maglevNet(X,Xi,Ai);Затем генерируется и тестируется функция MATLAB. Затем функция используется для создания общей/динамически связанной библиотеки с помощью mcc.
genFunction(maglevNet,'maglevFcn'); [y2,xf,af] = maglevFcn(X,Xi,Ai); accuracy2 = max(abs(cell2mat(y)-cell2mat(y2))) mcc -W lib:libMaglev -T link:lib maglevFcn
Следующий код генерирует другую версию функции MATLAB, которая поддерживает только аргументы матрицы (без массивов ячеек). Эта функция тестируется. Затем используется для генерации MEX-функции с помощью инструмента MATLAB Coder codegen, который также тестируется.
genFunction(maglevNet,'maglevFcn','MatrixOnly','yes'); x1 = cell2mat(X(1,:)); % Convert each input to matrix x2 = cell2mat(X(2,:)); xi1 = cell2mat(Xi(1,:)); % Convert each input state to matrix xi2 = cell2mat(Xi(2,:)); [y3,xf1,xf2] = maglevFcn(x1,x2,xi1,xi2); accuracy3 = max(abs(cell2mat(y)-y3)) x1Type = coder.typeof(double(0),[1 Inf]); % Coder type of input 1 x2Type = coder.typeof(double(0),[1 Inf]); % Coder type of input 2 xi1Type = coder.typeof(double(0),[1 2]); % Coder type of input 1 states xi2Type = coder.typeof(double(0),[1 2]); % Coder type of input 2 states codegen maglevFcn.m -config:mex -o maglevNetCodeGen ... -args {x1Type x2Type xi1Type xi2Type} [y4,xf1,xf2] = maglevNetCodeGen(x1,x2,xi1,xi2); dynamic_codegen_accuracy = max(abs(cell2mat(y)-y4))
Сведения о моделировании неглубоких нейронных сетей и развертывании обученных нейронных сетей с помощью инструментов Simulink см. в разделе Развертывание неглубоких нейронных сетей Simulink Diagrams.