Документация
Глубокое обучение является ветвью машинного обучения, которое учит компьютеры делать то, что прибывает естественно к людям: учитесь на опыте. Алгоритмы обучения используют вычислительные методы, чтобы “узнать” об информации непосредственно из данных, не используя предопределенное уравнение как модель. Глубокое обучение использует сверточные нейронные сети (CNNs), чтобы изучить полезные представления данных непосредственно из изображений.
Функции
| codegen | Сгенерируйте код C/C++ из кода MATLAB |
| coder.loadDeepLearningNetwork | Загрузите модель нейронной сети для глубокого обучения |
| coder.DeepLearningConfig | Создайте объекты настройки генерации кода глубокого обучения |
| coder.ARMNEONConfig | Параметры, чтобы сконфигурировать генерацию кода глубокого обучения с ARM Вычисляют Библиотеку |
| coder.MklDNNConfig | Параметры, чтобы сконфигурировать генерацию кода глубокого обучения с Math Kernel Library Intel для Глубоких нейронных сетей |
| coder.getDeepLearningLayers | Получите список слоев, поддержанных для генерации кода для определенной библиотеки глубокого обучения |
Установите продукты и сконфигурируйте среду для генерации кода для нейронных сетей для глубокого обучения.
Сгенерируйте код для предсказания от предварительно обученной сети.
Выберите сверточную нейронную сеть, которая поддерживается для вашего целевого процессора.
Используйте массивы глубокого обучения в коде MATLAB, предназначенном для генерации кода.
Придерживайтесь ограничений генерации кода для массивов глубокого обучения.
Сгенерируйте код C/C++ для предсказания от нейронной сети для глубокого обучения, которая не зависит ни от каких сторонних библиотек.
Сгенерируйте Код С++ для предсказания от нейронной сети для глубокого обучения, предназначаясь для центрального процессора Intel.
Сгенерируйте Код С++ для предсказания от нейронной сети для глубокого обучения, предназначаясь для процессора ARM.
Квантуйте и сгенерируйте код для предварительно обученной сверточной нейронной сети.
Русские Блоги
Преобразование кода Matlab в код C на основе Matlab Coder
Недавно я выполняю функции, связанные с обработкой сигналов, сначала выполняю симуляцию на matlab, затем использую c / c ++ для реализации и затем пытаюсь использовать Matlab Coder для выполнения функции преобразования.
1. Концепция и процесс разработки
MATLAB Coder может генерировать независимый, читаемый и переносимый код C / C ++ из кода MATLAB.
С точки зрения непрофессионала, это преобразование написанного кода функционального модуля matlab в код на языке c / c ++, и затем мы будем совершенствоваться на этом основании.
Среда разработки этой статьи: Win10 64, VS2015, Matlab R2016A.
Процесс разработки: 3 шага для генерации кода C с использованием MATLAB Coder:
2. Практический тест
Ссылочная статья дает идею отделения кода функционального модуля от тестового кода, поэтому эта статья опирается на эту идею для проведения практического тестирования.
Конечно, файл a.m функционального модуля можно использовать как файл b.m. Оба должны быть выбраны для компиляции во время компиляции (может пониматься как зависимость), но в этой статье пока не рассматривается реализация этой функции.
2.1 Код функционального модуля Matlab и его тестовый код
myfft.m
Удалите компонент постоянного тока из входных данных и выполните БПФ. Среди них% # codegen используется для предотвращения ошибок предупреждения
test_main.m
Создать набор данных и проверить
выход Matlab: 
f = (N-1)Fs/N = 261000/256=100Hz。
2.2 Используйте MATLAB Coder для генерации кода на языке c / c ++
2.3 Проверка VS2015
Вывод:
coder
Open MATLAB Coder app
Syntax
Description
If scriptname exists, coder overwrites it.
The script reproduces the project build configuration in a configuration object and builds the project. The script:
Defines the variable ARGS for function input types.
Defines the variable GLOBALS for global data initial values.
Runs the codegen command. When you run the script, the entry-point functions that are arguments to codegen must be on the search path.
If the project includes automated fixed-point conversion, coder generates two scripts:
A script scriptname that contains the MATLAB commands to:
Create a code configuration object that has the same settings as the project.
Run the codegen command to convert the fixed-point MATLAB function to a fixed-point C function.
This script contains the MATLAB commands to:
Create a floating-point to fixed-point conversion configuration object that has the same fixed-point conversion settings as the project.
Run the codegen command to convert the floating-point MATLAB function to a fixed-point MATLAB function.
For a project that includes fixed-point conversion, before converting the project to scripts, complete the Test Numerics step of the fixed-point conversion process.
Examples
Open an existing MATLAB Coder project
Build a MATLAB Coder project
Create a MATLAB Coder project
Convert a MATLAB Coder project to a MATLAB script
Create code configuration object from MATLAB Coder project
Create a MATLAB Coder project myadd.prj :
Open the MATLAB Coder app. Specify myadd as the entry point function.
On the Define Inputs Types page, specify u and v as double scalars.
At the MATLAB command line, run this command:
Input Arguments
projectname — Name of MATLAB Coder project
project name
Name of MATLAB Coder project that you want to create, open, or build. The project name must not contain spaces.
scriptname — Name of script file
script name
Output Arguments
cfg — Code configuration object
coder.MexCodeConfig | coder.CodeConfig | coder.EmbeddedCodeConfig
Code configuration object that contains the configuration settings stored in a MATLAB Coder project file.
Limitations
Creating a project or opening an existing project causes other MATLAB Coder or Fixed-Point Converter projects to close.
If your installation does not include the Embedded Coder product, the Embedded Coder settings do not show. However, values for these settings are saved in the project file. If you open the project in an installation that includes the Embedded Coder product, you see these settings.
A Fixed-Point Converter project opens in the Fixed-Point Converter app. To convert the project to a MATLAB Coder project, in the Fixed-Point Converter app:
Alternatives
On the Apps tab, in the Code Generation section, click MATLAB Coder.
Use the codegen function to generate code at the command line.
Matlab coder что это
In this tutorial, you use the MATLAB ® Coder™ app to generate a static C library for a MATLAB function. You first generate C code that can accept only inputs that have fixed preassigned size. You then generate C code that can accept inputs of many different sizes.
You can also generate code at the MATLAB command line by using the codegen command. For a tutorial on this workflow, see Generate C Code at the Command Line.
Tutorial Files
The MATLAB data file euclidean_data.mat contains two pieces of data: a single point in three-dimensional Euclidean space and a set of several other points in three-dimensional Euclidean space. More specifically:
The MATLAB file euclidean.m contains the function euclidean that implements the core algorithm in this example. The function takes x and cb as inputs. It calculates the Euclidean distance between x and each point in cb and returns these quantities:
Loading euclidean_data.mat is the preprocessing step that is executed before calling the core algorithm. Displaying the results is the post-processing step.
Use test scripts to separate the pre- and post-processing steps from the function implementing the core algorithm. This practice enables you to easily reuse your algorithm. You generate code for the MATLAB function that implements the core algorithm. You do not generate code for the test script.
Generate C Code for the MATLAB Function
Run the Original MATLAB Code
Make the MATLAB Code Suitable for Code Generation
The Code Analyzer in the MATLAB Editor continuously checks your code as you enter it. It reports issues and recommends modifications to maximize performance and maintainability.
Open euclidean.m in the MATLAB Editor. The Code Analyzer message indicator in the top right corner of the MATLAB Editor is green. The analyzer did not detect errors, warnings, or opportunities for improvement in the code.
After the function declaration, add the %#codegen directive:
The Code Analyzer message indicator becomes red, indicating that it has detected code generation issues.
To view the warning messages, move your cursor to the underlined code fragments. The warnings indicate that code generation requires the variables idx and distance to be fully defined before subscripting them. These warnings appear because the code generator must determine the sizes of these variables at their first appearance in the code. To fix this issue, use the ones function to simultaneously allocate and initialize these arrays.
The Code Analyzer message indicator becomes green again, indicating that it does not detect any more code generation issues.
For more information about using the Code Analyzer, see Check Code for Errors and Warnings Using the Code Analyzer.
You are now ready to compile your code by using the MATLAB Coder app. Here, compilation refers to the generation of C/C++ code from your MATLAB code.
Note
Compilation of MATLAB code refers to the generation of C/C++ code from the MATLAB code. In other contexts, the term compilation could refer to the action of a C/C++ compiler.
Open the MATLAB Coder App and Select Source Files
On the MATLAB toolstrip Apps tab, under Code Generation, click the MATLAB Coder app icon. The app opens the Select Source Files page.
Click Next to go to the Define Input Types step. The app runs the Code Analyzer (that you already ran in the previous step) and the Code Generation Readiness Tool on the entry-point function. The Code Generation Readiness Tool screens the MATLAB code for features and functions that are not supported for code generation. If the app identifies issues, it opens the Review Code Generation Readiness page where you can review and fix issues. In this example, because the app does not detect issues, it opens the Define Input Types page. For more information, see Code Generation Readiness Tool.
Note
The Code Analyzer and the Code Generation Readiness Tool might not detect all code generation issues. After eliminating the errors or warnings that these two tools detect, generate code with MATLAB Coder to determine if your MATLAB code has other compliance issues.
Certain MATLAB built-in functions and toolbox functions, classes, and System objects that are supported for C/C++ code generation have specific code generation limitations. These limitations and related usage notes are listed in the Extended Capabilities sections of their corresponding reference pages. For more information, see Functions and Objects Supported for C/C++ Code Generation.
Define Input Types
Instruct the app to automatically determine input properties by providing a script that calls the entry-point functions with sample inputs.
Specify properties directly.
Click Autodefine Input Types.
Click Next to go to the Check for Run-Time Issues step.
Check for Run-Time Issues
The Check for Run-Time Issues step generates a MEX file from your entry-point functions, runs the MEX function, and reports issues. A MEX function is generated code that can be called from inside MATLAB. It is a best practice to perform this step because you can detect and fix run-time errors that are harder to diagnose in the generated C code. By default, the MEX function includes memory integrity checks. These checks perform array bounds and dimension checking. The checks detect violations of memory integrity in code generated for MATLAB functions. For more information, see Control Run-Time Checks.
To convert MATLAB code to efficient C/C++ source code, the code generator introduces optimizations that, in certain situations, cause the generated code to behave differently than the original source code. See Differences Between Generated Code and MATLAB Code.
In the Check for Run-Time Issues dialog box, specify a test file or enter code that calls the entry-point function with example inputs. For this example, use the test file test that you used to define the input types.
Click Check for Issues.
The app generates a MEX function. It runs the test script test replacing calls to euclidean with calls to the generated MEX. If the app detects issues during the MEX function generation or execution, it provides warning and error messages. Click these messages to navigate to the problematic code and fix the issue. In this example, the app does not detect issues.
By default, the app collects line execution counts. These counts help you to see how well the test file test.m exercised the euclidean function. To view line execution counts, click View MATLAB line execution counts. The app editor displays a color-coded bar to the left of the code. To extend the color highlighting over the code and to see line execution counts, place your cursor over the bar.
Click Next to go to the Generate Code step.
Note
Before generating standalone C/C++ code from your MATLAB code, generate a MEX function. Run the generated MEX function and make sure it has the same run-time behavior as your MATLAB function. If the generated MEX function produces answers that are different from MATLAB, or produces an error, you must fix these issues before proceeding to standalone code generation. Otherwise, the standalone code that you generate might be unreliable and have undefined behavior.
Generate C Code
In the Generate dialog box, set Build type to Static Library (.lib) and Language to C. Use the default values for the other project build configuration settings.
Instead of generating a C static library, you can choose to generate a MEX function or other C/C++ build types. Different project settings are available for the MEX and C/C++ build types. When you switch between MEX and C/C++ code generation, verify the settings that you choose.
Click View Report to view the report in the Report Viewer. If the code generator detects errors or warnings during code generation, the report describes the issues and provides links to the problematic MATLAB code. For more information, see Code Generation Reports.
Click Next to open the Finish Workflow page.
Review the Finish Workflow Page
The Finish Workflow page indicates that code generation succeeded. It provides a project summary and links to generated output.
Compare the Generated C Code to Original MATLAB Code
Important information about the generated C code:
The function signature is:
The code generator preserves your function name and comments. When possible, the code generator preserves your variable names.
Note
If a variable in your MATLAB code is set to a constant value, it does not appear as a variable in the generated C code. Instead, the generated C code contains the actual value of the variable.
Generate C Code for Variable-Size Inputs
The C function that you generated for euclidean.m can accept only inputs that have the same size as the sample inputs that you specified during code generation. However, the input arrays to the corresponding MATLAB function can be of any size. In this part of the tutorial, you generate C code from euclidean.m that accepts variable-size inputs.
Suppose that you want the dimensions of x and cb in the generated C code to have these properties:
To specify these input properties:
You can now generate code by following the same steps as before. The function signature for the generated C code in euclidean.c now reads:
Next Steps
Learn about code generation support for MATLAB built-in functions and toolbox functions, classes, and System objects
Generate and modify an example C main function and use it to build a C executable program
Package generated files into a compressed file
Optimize the execution speed or memory usage of generated code
Integrate your custom C/C++ code into the generated code
Документация
Сгенерируйте код С при помощи приложения MATLAB Coder
Можно также сгенерировать код в командной строке MATLAB при помощи codegen команда. Для примера на этом рабочем процессе смотрите, Генерируют код С в Командной строке.
Учебные файлы
Файл данных MATLAB euclidean_data.mat содержит две части данных: одна точка в 3D Евклидово пространстве и наборе нескольких других точек в 3D Евклидово пространстве. Более в частности:
ФАЙЛ MATLAB euclidean.m содержит функциональный euclidean это реализует основной алгоритм в этом примере. Функция берет x и cb как входные параметры. Это вычисляет Евклидово расстояние между x и каждая точка в cb и возвращает эти количества:
Загрузка euclidean_data.mat шаг предварительной обработки, который выполняется прежде, чем вызвать основной алгоритм. Отображение результатов является шагом последующей обработки.
Совет
Сгенерируйте код С для функции MATLAB
Запустите оригинальный код MATLAB
Сделайте код MATLAB подходящим для генерации кода
Анализатор кода в редакторе MATLAB постоянно проверяет ваш код, когда вы вводите его. Это сообщает о проблемах и рекомендует модификациям максимизировать эффективность и поддерживаемость.
Открытый euclidean.m в редакторе MATLAB. Индикатор сообщения Анализатора кода в правом верхнем углу редактора MATLAB является зеленым. Анализатор не обнаружил ошибки, предупреждения или возможности для улучшения кода.
После объявления функции добавьте %#codegen директива:
Индикатор сообщения Анализатора кода становится красным, указывая, что он обнаружил проблемы генерации кода.
Чтобы просмотреть предупреждающие сообщения, переместите свой курсор в подчеркнутые фрагменты кода. Предупреждения указывают, что генерация кода требует переменных idx и distance быть полностью заданным прежде, чем преобразовать их в нижний индекс. Эти предупреждения появляются, потому что генератор кода должен определить размеры этих переменных в их первом выступлении в коде. Чтобы устранить эту проблему, используйте ones функционируйте, чтобы одновременно выделить и инициализировать эти массивы.
Индикатор сообщения Анализатора кода становится зеленым снова, указывая, что он больше не обнаруживает проблемы генерации кода.
Для получения дополнительной информации об использовании Анализатора кода смотрите Проверку кода для Ошибок и Предупреждений.
Примечание
Компиляция кода MATLAB относится к генерации кода C/C++ из кода MATLAB. В других контекстах термин компиляция мог отнестись к действию компилятора C/C++.
Откройте приложение MATLAB Coder и выберите Source Files
Нажмите Next, чтобы перейти к шагу Define Input Types. Выполнение приложения Анализатор кода (что вы уже запустились на предыдущем шаге), и Инструмент Готовности Генерации кода на функции точки входа. Инструмент Готовности Генерации кода экранирует код MATLAB на функции и функции, которые не поддерживаются для генерации кода. Если приложение идентифицирует проблемы, оно открывает страницу Review Code Generation Readiness, где можно рассмотреть и устранить проблемы. В этом примере, потому что приложение не обнаруживает проблемы, оно открывает страницу Define Input Types. Для получения дополнительной информации смотрите Инструмент Готовности Генерации кода.
Примечание
Определенные встроенные функции MATLAB и функции тулбокса, классы и Системные объекты, которые поддерживаются для генерации кода C/C++, имеют определенные ограничения генерации кода. Эти ограничения и связанные указания по применению перечислены в разделах Extended Capabilities их соответствующих страниц с описанием. Для получения дополнительной информации смотрите Функции и Объекты, Поддержанные для Генерации кода C/C++.
Определите входные типы
Дайте приложению команду автоматически определять входные свойства путем обеспечения скрипта, который вызывает функции точки входа с демонстрационными входными параметрами.
Задайте свойства непосредственно.
Нажмите Autodefine Input Types.
Нажмите Next, чтобы перейти к шагу the Check for Run-Time Issues.
Проверяйте на проблемы во время выполнения
Чтобы преобразовать код MATLAB в эффективный исходный код C/C++, генератор кода вводит оптимизацию, которая, в определенных ситуациях, заставляет сгенерированный код вести себя по-другому, чем код первоисточника. Смотрите Различия Между Сгенерированным кодом и кодом MATLAB.
В диалоговом окне Check for Run-Time Issues задайте тестовый файл или введите код, который вызывает функцию точки входа с входными параметрами в качестве примера. В данном примере используйте тестовый файл test то, что вы раньше задавали входные типы.
Нажмите Check for Issues.
Приложение генерирует MEX-функцию. Это запускает тестовый скрипт test заменяя вызовы euclidean с вызовами сгенерированного MEX. Если приложение обнаруживает проблемы во время генерации MEX-функции или выполнения, это предоставляет предупреждающие сообщения и сообщения об ошибке. Кликните по этим сообщениям, чтобы перейти к проблематичному коду и устранить проблему. В этом примере приложение не обнаруживает проблемы.
По умолчанию приложение собирает количества выполнения линии. Эти количества помогают вам, чтобы видеть, как хорошо тестовый файл test.m осуществленный euclidean функция. Чтобы просмотреть количества выполнения линии, нажмите View MATLAB line execution counts. Редактор приложения отображает панель, на которую наносят цветную маркировку, слева от кода. Чтобы расширить выделение цвета по коду и видеть количества выполнения линии, установите свой курсор на панель.
Нажмите Next, чтобы перейти к шагу Generate Code.
Примечание
Прежде, чем сгенерировать автономный код C/C++ из вашего кода MATLAB, сгенерируйте MEX-функцию. Запустите сгенерированную MEX-функцию и убедитесь, что она имеет то же поведение во время выполнения как ваша функция MATLAB. Если сгенерированная MEX-функция производит ответы, которые отличаются от MATLAB, или производит ошибку, необходимо устранить эти проблемы прежде, чем перейти к автономной генерации кода. В противном случае автономный код, который вы генерируете, может быть ненадежным и иметь неопределенное поведение.
Сгенерируйте код С
В диалоговом окне Generate, набор Build type к Static Library (.lib) и Language к C. Используйте значения по умолчанию для других настроек конфигурации сборки проекта.
Вместо того, чтобы генерировать статическую библиотеку C, можно принять решение сгенерировать MEX-функцию или другие типы сборки C/C++. Различные настройки проекта доступны для MEX и типов сборки C/C++. Когда вы переключаетесь между MEX и генерацией кода C/C++, проверяете настройки, которые вы выбираете.
Нажмите View Report, чтобы просмотреть отчет в Средстве просмотра Отчета. Если генератор кода обнаруживает ошибки или предупреждения во время генерации кода, отчет описывает проблемы и обеспечивает ссылки на проблематичный код MATLAB. Для получения дополнительной информации см. Отчеты Генерации кода.
Нажмите Next, чтобы открыть страницу Finish Workflow.
Рассмотрите страницу рабочего процесса конца
Страница Finish Workflow указывает на ту генерацию кода, за которой следуют. Это предоставляет сводные данные проекта и ссылки на сгенерированный выход.
Сравните сгенерированный код C с оригинальным кодом MATLAB
Важная информация о сгенерированном коде C:
Генератор кода сохраняет ваше имя функции и комментарии. Когда возможно, генератор кода сохраняет ваши имена переменных.
Примечание
Если переменная в вашем коде MATLAB установлена в постоянное значение, это не появляется как переменная в сгенерированном коде C. Вместо этого сгенерированный код C содержит фактическое значение переменной.
Сгенерируйте код С для входных параметров Переменного Размера
Функция C, которую вы сгенерировали для euclidean.m может принять только входные параметры, которые имеют тот же размер как демонстрационные входные параметры, которые вы задали во время генерации кода. Однако входные массивы к соответствующей функции MATLAB могут иметь любой размер. В этой части примера вы генерируете код С от euclidean.m это принимает входные параметры переменного размера.
Предположим, что вы хотите размерности x и cb в сгенерированном коде C, чтобы иметь эти свойства:
Задавать эти входные свойства:
Можно теперь сгенерировать код путем выполнения тех же шагов как прежде. Функциональная подпись для сгенерированного кода C в euclidean.c теперь чтения:
Следующие шаги
Узнайте о поддержке генерации кода встроенных функций MATLAB и функций тулбокса, классов и Системных объектов
Сгенерируйте Код С++
Сгенерируйте и измените пример C основная функция и используйте ее, чтобы создать исполняемую программу C
Пакет сгенерировал файлы в сжатый файл
Оптимизируйте скорость выполнения или использование памяти сгенерированного кода
Интегрируйте свой пользовательский код C/C++ в сгенерированный код
























