Функция genFunction
позволяет автономный MATLAB® функции для обученной неглубокой нейронной сети. Сгенерированный код содержит всю информацию, необходимую для симуляции нейронной сети, включая настройки, значения веса и смещения, функции модуля и вычисления.
Сгенерированная функция MATLAB может использоваться, чтобы проверить точные расчеты симуляции, которые выполняет конкретная мелкая нейронная сеть, и облегчает развертывание нейронных сетей для многих целей с широким спектром продуктов и инструментов развертывания MATLAB.
Функция genFunction
введено в панели развертывания в инструментах nftool
, nctool
, nprtool
и ntstool
. Для получения информации об этих функциях инструмента смотрите Fit Data with a Shallow Neural Network, Classify Patterns with a Shallow Neural Network, Cluster Data with a Self-Organizing Map и Shallow Neural Time-Series Предсказies и ModEling.
Расширенные скрипты, сгенерированные на панели Save Results каждого из этих инструментов, включают пример развертывания сетей с genFunction
.
Функция genFunction
генерирует самостоятельную функцию MATLAB для симуляции любой обученной неглубокой нейронной сети и подготовки ее к развертыванию. Это может быть полезно для нескольких задач:
Документируйте преобразования ввода-вывода нейронной сети, используемые в качестве шаблона вычисления для ручных реимплементаций сети
Используйте блок MATLAB Function, чтобы создать Simulink® блок
Используйте MATLAB Compiler™ для:
Сгенерируйте независимые исполняемые файлы
Сгенерируйте Excel® надстройки
Используйте MATLAB Compiler SDK™ для:
Сгенерируйте библиотеки C/C + +
Сгенерируйте компоненты .COM
Сгенерируйте Java® компоненты
Сгенерируйте компоненты .NET
Используйте MATLAB Coder™ для:
Сгенерируйте код C/C + +
Сгенерируйте эффективные MEX-функции
genFunction(net,'pathname')
принимает нейронную сеть и путь к файлу и создает автономный файл функции MATLAB filename.m
.
genFunction(...,'MatrixOnly','yes')
переопределяет ячейку/матрицу по умолчанию обозначения а вместо этого генерирует функцию, которая использует только матричные аргументы, совместимые с инструментами MATLAB Coder. Для статических сетей матричные столбцы интерпретируются как независимые выборки. Для динамических сетей матричные столбцы интерпретируются как серия временных шагов. Значение по умолчанию '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 Compiler (требуется лицензия) в общую/динамически связанную библиотеку с 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-схем Shallow Neural Network.