Разверните мелкие функции нейронной сети

Функции развертывания и инструменты для обучившего нейронные сети

Функциональный genFunction позволяет автономные функции MATLAB® для обученной мелкой нейронной сети. Сгенерированный код содержит всю информацию, должен был моделировать нейронную сеть, включая настройки, вес и значения смещения, функции модуля и вычисления.

Сгенерированная функция MATLAB может использоваться, чтобы осмотреть точные вычисления симуляции, которые конкретная мелкая нейронная сеть выполняет и облегчает развертывать нейронные сети во многих целях с большим разнообразием продуктов развертывания MATLAB и инструментов.

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

Усовершенствованные скрипты, сгенерированные на панели Результатов Сохранения каждого из этих инструментов, включают пример развертывающихся сетей с 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, смотрите, Развертывают Мелкую Нейронную сеть Схемы Simulink.

Похожие темы