В этом примере показано, как использовать блок RegressionNeuralNetwork Predict для предсказания ответа в Simulink®. Блок принимает наблюдение (данные о предикторе) и возвращает предсказанный ответ для наблюдения с помощью обученной модели регрессии нейронной сети.
Загрузите cereal
набор данных. Создайте предиктор X
как числовая матрица, которая содержит 6 функций 77 наблюдений. Создайте ответ Y
как числовой вектор, который содержит калории для каждых хлопьев.
load cereal
X = [Carbo Cups Fat Fiber Protein Sugars];
Y = Calories;
Разделите данные на набор обучающих данных и набор тестов при помощи нестратифицированного раздела затяжки. Программное обеспечение резервирует приблизительно 20% наблюдений для набора тестовых данных и использует остальную часть наблюдений для обучающего набора данных.
rng("default") % For reproducibility of the partition cv = cvpartition(length(Y),"Holdout",0.20);
Извлеките обучение и протестируйте индексы.
trainingInds = training(cv); testInds = test(cv);
Задайте наборы тестовых данных и обучение.
XTrain = X(trainingInds,:); YTrain = Y(trainingInds); XTest = X(testInds,:); YTest = Y(testInds);
Обучите модель регрессии нейронной сети путем передачи обучающих данных XTrain
и YTrain
к fitrnet
функция. Задайте, чтобы стандартизировать числовые предикторы.
nnetMdl = fitrnet(XTrain,YTrain,"Standardize",true)
nnetMdl = RegressionNeuralNetwork ResponseName: 'Y' CategoricalPredictors: [] ResponseTransform: 'none' NumObservations: 62 LayerSizes: 10 Activations: 'relu' OutputLayerActivation: 'linear' Solver: 'LBFGS' ConvergenceInfo: [1x1 struct] TrainingHistory: [704x7 table] Properties, Methods
nnetMdl
RegressionNeuralNetwork
модель. Можно использовать запись через точку, чтобы получить доступ к свойствам nnetMdl
. Например, можно задать nnetMdl.TrainingHistory
получить больше информации об учебной истории модели нейронной сети.
Этот пример предоставляет модели Simulink slexRegressionNeuralNetworkPredictExample.slx
, который включает блок RegressionNeuralNetwork Predict. Можно открыть модель Simulink или создать новую модель как описано в этом разделе.
Откройте модель Simulink slexRegressionNeuralNetworkPredictExample.slx
.
SimMdlName = 'slexRegressionNeuralNetworkPredictExample';
open_system(SimMdlName)
PreLoadFcn
функция обратного вызова slexRegressionNeuralNetworkPredictExample
включает код, чтобы загрузить выборочные данные, обучить модель нейронной сети и создать входной сигнал для модели Simulink. Если вы открываете модель Simulink, программное обеспечение запускает код в PreLoadFcn
прежде, чем загрузить модель Simulink. Чтобы просмотреть функцию обратного вызова, в разделе Setup по вкладке Modeling, нажимают Model Settings и выбирают Model Properties. Затем на вкладке Callbacks выберите PreLoadFcn
функция обратного вызова в панели коллбэков Модели.
Вместо того, чтобы открыть модель, если, можно создать новую модель. Чтобы создать новую модель Simulink, откройте шаблон Blank Model и добавьте блок RegressionNeuralNetwork Predict. Добавьте блоки Inport и Outport и соедините их с блоком RegressionNeuralNetwork Predict.
Дважды кликните блок RegressionNeuralNetwork Predict, чтобы открыть диалоговое окно Block Parameters. Можно задать имя переменной рабочей области, которая содержит обученную модель нейронной сети. Именем переменной по умолчанию является nnetMdl
. Нажмите Кнопку Обновить. Раздел Trained Machine Learning Model диалогового окна отображается, опции раньше обучали модель nnetMdl
.
Блок RegressionNeuralNetwork Predict ожидает наблюдение, содержащее 6 значений предиктора. Дважды кликните Inport блок и установите размерности Порта на 6 на вкладке Signal Attributes.
Создайте входной сигнал в форме массива структур для модели Simulink. Массив структур должен содержать эти поля:
time
— Моменты времени, в которых наблюдения вводят модель. Ориентация должна соответствовать наблюдениям в данных о предикторе. В этом примере, time
должен быть вектор-столбец.
signals
— Массив структур 1 на 1, описывающий входные данные и содержащий поля values
и dimensions
, где values
матрица данных о предикторе и dimensions
количество переменных предикторов.
Создайте соответствующий массив структур для будущих предсказаний.
cerealInput.time = (0:length(YTest)-1)'; cerealInput.signals(1).values = XTest; cerealInput.signals(1).dimensions = size(XTest,2);
Импортируйте данные сигнала из рабочей области:
Откройте диалоговое окно Configuration Parameters. На вкладке Modeling нажмите Model Settings.
В панели Импорта/Экспорта Данных установите флажок Input и введите cerealInput
в смежном текстовом поле.
В панели Решателя, под Временем симуляции, Временем остановки набора к cerealInput.time(end)
. При выборе Решателя, Типе набора к Fixed-step
, и Решатель набора к discrete (no continuous states)
.
Для получения дополнительной информации смотрите Данные сигнала Загрузки для Симуляции (Simulink).
Симулируйте модель.
sim(SimMdlName);
Когда Inport блок обнаруживает наблюдение, он помещает наблюдение в блок RegressionNeuralNetwork Predict. Можно использовать Инспектора Данных моделирования (Simulink), чтобы просмотреть записанные данные блока Outport.
RegressionNeuralNetwork Predict