Сгенерируйте функцию, которая определяет типы данных для генерации кода с фиксированной точкой
Чтобы сгенерировать код C/C + + с фиксированной точкой для predict
функция модели машинного обучения, использование generateLearnerDataTypeFcn
, saveLearnerForCoder
, loadLearnerForCoder
, и codegen
(MATLAB Coder).
После обучения модели машинного обучения сохраните модель используя saveLearnerForCoder
.
Создайте структуру, которая определяет типы данных с фиксированной точкой при помощи функции, сгенерированной из generateLearnerDataTypeFcn
.
Задайте функцию точки входа, которая загружает модель при помощи обоих loadLearnerForCoder
и структуру, а затем вызывает predict
функция.
Сгенерируйте код используя codegen
, а затем проверьте сгенерированный код.
generateLearnerDataTypeFcn
функция требует Fixed-Point 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
(Fixed-Point Designer) объект.
В сгенерированной фиксированной точке большое количество операций или большая переменная область значений могут привести к потере точности по сравнению с точностью соответствующего кода с плавающей точкой. При обучении модели SVM имейте в виду следующие советы, чтобы избежать потери точности в сгенерированном коде с фиксированной точкой:
Стандартизация данных ('Standardize'
) - Чтобы избежать переполнений в значениях свойств модели векторов поддержки в модели SVM, можно стандартизировать данные предиктора. Вместо использования 'Standardize'
аргумент пары "имя-значение" при обучении модели стандартизируйте данные предиктора перед передачей данных в функцию аппроксимации и predict
чтобы код с фиксированной точкой не включал операции для стандартизации.
Функция ядра ('KernelFunction'
) - Использование Гауссова ядра или линейного ядра предпочтительнее, чем использование полиномиального ядра. Полиномиальное ядро требует более высокой вычислительной сложности, чем другие ядра, и выход функции полиномиального ядра неограниченен.
Шкала ядра ('KernelScale'
) - Использование шкалы ядра требует дополнительных операций, если значение 'KernelScale'
не равен 1.
Предсказание задачи классификации одного класса может иметь потерю точности, если предсказанные значения баллов класса имеют большую область значений.
loadLearnerForCoder
| saveLearnerForCoder
| buildInstrumentedMex
(Fixed-Point Designer) | fi
(Fixed-Point Designer) | showInstrumentationResults
(Fixed-Point Designer) | codegen
(MATLAB Coder)