exponenta event banner

Развертывание неглубоких функций нейронной сети

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

Функция 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 см. в разделе Развертывание неглубоких нейронных сетей Simulink Diagrams.

Связанные темы