Создание функции, определяющей типы данных для создания кода с фиксированной точкой
Создание кода C/C + + с фиксированной точкой для predict функция модели машинного обучения, использование generateLearnerDataTypeFcn, saveLearnerForCoder, loadLearnerForCoder, и codegen (Кодер MATLAB).
После обучения модели машинного обучения сохраните модель с помощью saveLearnerForCoder.
Создание структуры, определяющей типы данных с фиксированной точкой с помощью функции, созданной из generateLearnerDataTypeFcn.
Определите функцию точки входа, которая загружает модель, используя обе loadLearnerForCoder и структура, а затем вызывает predict функция.
Создать код с помощью codegen, а затем проверьте созданный код.
generateLearnerDataTypeFcn для функции требуется Designer™ фиксированной точки, а для создания кода C/C + + с фиксированной точкой требуется MATLAB ® Coder™ и Fixed-Point Designer.
На этой блок-схеме показан рабочий процесс создания кода с фиксированной точкой для predict функция модели машинного обучения. Использовать generateLearnerDataTypeFcn для выделенного шага.
![]()
generateLearnerDataTypeFcn( генерирует функцию типа данных, которая определяет типы данных с фиксированной точкой для переменных, необходимых для генерации кода C/C + + с фиксированной точкой для прогнозирования модели машинного обучения.filename,X)filename сохраняет модель машинного обучения и X содержит данные предиктора для predict функция модели.
Созданная функция используется для создания структуры, определяющей типы данных с фиксированной точкой. Затем используйте структуру в качестве входного аргумента T из loadLearnerForCoder.
generateLearnerDataTypeFcn( задает дополнительные параметры, используя один или несколько аргументов пары имя-значение. Например, можно указать filename,X,Name,Value)'WordLength',32 для использования 32-разрядной длины слова для типов данных с фиксированной точкой.
Для повышения точности создаваемого кода с фиксированной точкой можно настроить типы данных с фиксированной точкой. Измените типы данных с фиксированной точкой, обновив функцию типа данных (myMdl_datatype) и создание новой структуры, а затем повторное создание кода с использованием новой структуры. Вы можете обновить myMdl_datatype функция одним из двух способов:
Регенерировать myMdl_datatype функция с помощью generateLearnerDataTypeFcn и его аргументы пары имя-значение.
Увеличение длины слова с помощью 'WordLength' аргумент пары имя-значение.
Уменьшите запас прочности с помощью 'PercentSafetyMargin' аргумент пары имя-значение.
При увеличении длины слова или уменьшении запаса прочности программа может предложить большую длину дроби и, следовательно, повысить точность генерируемого кода на основе данного набора данных.
Вручную измените типы данных с фиксированной точкой в файле функции (myMdl_datatype.m). Для каждой переменной можно настроить длину слова и длину дроби и задать математические настройки с фиксированной точкой с помощью fimath (Конструктор фиксированных точек).
В сгенерированном коде с фиксированной запятой большое количество операций или большой диапазон переменных может привести к потере точности по сравнению с точностью соответствующего кода с плавающей запятой. При обучении модели SVM учитывайте следующие советы, чтобы избежать потери точности в сгенерированном коде с фиксированной точкой:
Стандартизация данных ('Standardize') - Чтобы избежать переполнения значений свойств модели векторов поддержки в модели SVM, можно стандартизировать данные предиктора. Вместо использования 'Standardize' аргумент пары имя-значение при обучении модели, стандартизировать данные предиктора перед передачей данных в функцию аппроксимации и predict функция для того, чтобы код с фиксированной точкой не включал операции по стандартизации.
Функция ядра ('KernelFunction') - Использование гауссова ядра или линейного ядра предпочтительно, чем использование полиномиального ядра. Ядро многочлена требует более высокой вычислительной сложности, чем другие ядра, а выход функции ядра многочлена неограничен.
Шкала ядра ('KernelScale') - Использование шкалы ядра требует дополнительных операций, если значение 'KernelScale' не является 1.
Предсказание одноклассной проблемы классификации может иметь потерю точности, если прогнозируемые значения оценки класса имеют большой диапазон.
loadLearnerForCoder | saveLearnerForCoder | buildInstrumentedMex (Конструктор фиксированных точек) | fi (Конструктор фиксированных точек) | showInstrumentationResults (Конструктор фиксированных точек) | codegen (Кодер MATLAB)