Обучите модель регрессии нейронной сети
Использование fitrnet
обучать feedforward, полностью соединенную нейронную сеть для регрессии. Первый полносвязный слой нейронной сети имеет связь от сетевого входа (данные о предикторе), и каждый последующий слой имеет связь от предыдущего слоя. Каждый полносвязный слой умножает вход на матрицу веса и затем добавляет вектор смещения. Функция активации следует за каждым полносвязным слоем, исключая последнее. Итоговый полносвязный слой производит выход сети, а именно, предсказанные значения отклика. Для получения дополнительной информации смотрите Структуру Нейронной сети.
возвращает модель Mdl
= fitrnet(Tbl
,ResponseVarName
)Mdl
регрессии нейронной сети обученное использование предикторов в таблице
Tbl
и значения отклика в ResponseVarName
табличная переменная.
задает опции с помощью одних или нескольких аргументов name-value в дополнение к любой из комбинаций входных аргументов в предыдущих синтаксисах. Например, можно настроить количество выходных параметров и функций активации для полносвязных слоев путем определения Mdl
= fitrnet(___,Name,Value
)LayerSizes
и Activations
аргументы name-value.
Обучите модель регрессии нейронной сети и оцените эффективность модели на наборе тестов.
Загрузите carbig
набор данных, который содержит измерения автомобилей, сделанных в 1970-х и в начале 1980-х. Составьте таблицу, содержащую переменные предикторы Acceleration
, Displacement
, и так далее, а также переменная отклика MPG
.
load carbig cars = table(Acceleration,Displacement,Horsepower, ... Model_Year,Origin,Weight,MPG);
Разделите данные в наборы обучающих данных и наборы тестов. Используйте приблизительно 80% наблюдений, чтобы обучить модель нейронной сети, и 20% наблюдений проверять производительность обученной модели на новых данных. Используйте cvpartition
разделить данные.
rng("default") % For reproducibility of the data partition c = cvpartition(length(MPG),"Holdout",0.20); trainingIdx = training(c); % Training set indices carsTrain = cars(trainingIdx,:); testIdx = test(c); % Test set indices carsTest = cars(testIdx,:);
Обучите модель регрессии нейронной сети путем передачи carsTrain
обучающие данные к fitrnet
функция. Для лучших результатов задайте, чтобы стандартизировать данные о предикторе.
Mdl = fitrnet(carsTrain,"MPG","Standardize",true)
Mdl = RegressionNeuralNetwork PredictorNames: {'Acceleration' 'Displacement' 'Horsepower' 'Model_Year' 'Origin' 'Weight'} ResponseName: 'MPG' CategoricalPredictors: 5 ResponseTransform: 'none' NumObservations: 314 LayerSizes: 10 Activations: 'relu' OutputLayerActivation: 'linear' Solver: 'LBFGS' ConvergenceInfo: [1×1 struct] TrainingHistory: [1000×7 table] Properties, Methods
Mdl
обученный RegressionNeuralNetwork
модель. Можно использовать запись через точку, чтобы получить доступ к свойствам Mdl
. Например, можно задать Mdl.TrainingHistory
получить больше информации об учебной истории модели нейронной сети.
Оцените эффективность модели регрессии на наборе тестов путем вычисления тестовой среднеквадратической ошибки (MSE). Меньшие значения MSE указывают на лучшую эффективность.
testMSE = loss(Mdl,carsTest,"MPG")
testMSE = 16.6154
Задайте структуру модели регрессии нейронной сети, включая размер полносвязных слоев.
Загрузите carbig
набор данных, который содержит измерения автомобилей, сделанных в 1970-х и в начале 1980-х. Создайте матричный X
содержа переменные предикторы Acceleration
, Cylinders
, и так далее. Сохраните переменную отклика MPG
в переменной Y
.
load carbig
X = [Acceleration Cylinders Displacement Weight];
Y = MPG;
Разделите данные в обучающие данные (XTrain
и YTrain
) и тестовые данные (XTest
и YTest
). Зарезервируйте приблизительно 20% наблюдений для тестирования и используйте остальную часть наблюдений для обучения.
rng("default") % For reproducibility of the partition c = cvpartition(length(Y),"Holdout",0.20); trainingIdx = training(c); % Indices for the training set XTrain = X(trainingIdx,:); YTrain = Y(trainingIdx); testIdx = test(c); % Indices for the test set XTest = X(testIdx,:); YTest = Y(testIdx);
Обучите модель регрессии нейронной сети. Задайте, чтобы стандартизировать данные о предикторе и иметь 30 выходных параметров в первом полносвязном слое и 10 выходных параметров во втором полносвязном слое. По умолчанию оба слоя используют исправленный линейный модуль (ReLU) функция активации. Можно изменить функции активации для полносвязных слоев при помощи Activations
аргумент значения имени.
Mdl = fitrnet(XTrain,YTrain,"Standardize",true, ... "LayerSizes",[30 10])
Mdl = RegressionNeuralNetwork ResponseName: 'Y' CategoricalPredictors: [] ResponseTransform: 'none' NumObservations: 318 LayerSizes: [30 10] Activations: 'relu' OutputLayerActivation: 'linear' Solver: 'LBFGS' ConvergenceInfo: [1×1 struct] TrainingHistory: [1000×7 table] Properties, Methods
Доступ к весам и смещениям для полносвязных слоев обученной модели при помощи LayerWeights
и LayerBiases
свойства Mdl
. Первые два элемента каждого свойства соответствуют значениям для первых двух полносвязных слоев, и третий элемент соответствует значениям для итогового полносвязного слоя для регрессии. Например, отобразите веса и смещения для первого полносвязного слоя.
Mdl.LayerWeights{1}
ans = 30×4
-1.0617 0.1287 0.0797 0.4648
-0.6497 -1.4565 -2.6026 2.6962
-0.6420 0.2744 -0.0234 -0.0252
-1.9727 -0.4665 -0.5833 0.9371
-0.4373 0.1607 0.3930 0.7859
0.5091 -0.0032 -0.6503 -1.6694
0.0123 -0.2624 -2.2928 -1.0965
-0.1386 1.2747 0.4085 0.5395
-0.1755 1.5641 -3.1896 -1.1336
0.4401 0.4942 1.8957 -1.1617
⋮
Mdl.LayerBiases{1}
ans = 30×1
-1.3086
-1.6205
-0.7815
1.5382
-0.5256
1.2394
-2.3078
-1.0709
-1.8898
1.9443
⋮
Итоговый полносвязный слой имеет тот выход. Количество слоя выходные параметры соответствует первой размерности весов слоя и смещений слоя.
size(Mdl.LayerWeights{end})
ans = 1×2
1 10
size(Mdl.LayerBiases{end})
ans = 1×2
1 1
Чтобы оценить эффективность обученной модели, вычислите среднеквадратическую ошибку (MSE) набора тестов для Mdl
. Меньшие значения MSE указывают на лучшую эффективность.
testMSE = loss(Mdl,XTest,YTest)
testMSE = 17.2022
Сравните предсказанные значения отклика набора тестов с истинными значениями отклика. Постройте предсказанные мили на галлон (MPG) вдоль вертикальной оси и истинный MPG вдоль горизонтальной оси. Точки на ссылочной линии указывают на правильные предсказания. Хорошая модель производит предсказания, которые рассеиваются около линии.
testPredictions = predict(Mdl,XTest); plot(YTest,testPredictions,".") hold on plot(YTest,YTest) hold off xlabel("True MPG") ylabel("Predicted MPG")
В каждой итерации учебного процесса вычислите потерю валидации нейронной сети. Остановите учебный процесс рано, если потеря валидации достигает разумного минимума.
Загрузите patients
набор данных. Составьте таблицу от набора данных. Каждая строка соответствует одному пациенту, и каждый столбец соответствует диагностической переменной. Используйте Systolic
переменная как переменная отклика и остальная часть переменных как предикторы.
load patients
tbl = table(Age,Diastolic,Gender,Height,Smoker,Weight,Systolic);
Разделите данные на набор обучающих данных tblTrain
и валидация установила tblValidation
. Программное обеспечение резервирует приблизительно 30% наблюдений для набора данных валидации и использует остальную часть наблюдений для обучающего набора данных.
rng("default") % For reproducibility of the partition c = cvpartition(size(tbl,1),"Holdout",0.30); trainingIndices = training(c); validationIndices = test(c); tblTrain = tbl(trainingIndices,:); tblValidation = tbl(validationIndices,:);
Обучите модель регрессии нейронной сети при помощи набора обучающих данных. Задайте Systolic
столбец tblTrain
как переменная отклика. Оцените модель в каждой итерации при помощи набора валидации. Задайте, чтобы отобразить учебную информацию в каждой итерации при помощи Verbose
аргумент значения имени. По умолчанию учебный процесс заканчивается рано, если потеря валидации больше или равна минимальной потере валидации, вычисленной до сих пор, шесть раз подряд. Чтобы изменить число раз, потере валидации позволяют быть больше или быть равной минимуму, задать ValidationPatience
аргумент значения имени.
Mdl = fitrnet(tblTrain,"Systolic", ... "ValidationData",tblValidation, ... "Verbose",1);
|==========================================================================================| | Iteration | Train Loss | Gradient | Step | Iteration | Validation | Validation | | | | | | Time (sec) | Loss | Checks | |==========================================================================================| | 1| 516.021993| 3220.880047| 0.644473| 0.005193| 568.289202| 0| | 2| 313.056754| 229.931405| 0.067026| 0.002658| 304.023695| 0| | 3| 308.461807| 277.166516| 0.011122| 0.001363| 296.935608| 0| | 4| 262.492770| 844.627934| 0.143022| 0.000531| 240.559640| 0| | 5| 169.558740| 1131.714363| 0.336463| 0.000652| 152.531663| 0| | 6| 89.134368| 362.084104| 0.382677| 0.001059| 83.147478| 0| | 7| 83.309729| 994.830303| 0.199923| 0.000515| 76.634122| 0| | 8| 70.731524| 327.637362| 0.041366| 0.000361| 66.421750| 0| | 9| 66.650091| 124.369963| 0.125232| 0.000380| 65.914063| 0| | 10| 66.404753| 36.699328| 0.016768| 0.000363| 65.357335| 0| |==========================================================================================| | Iteration | Train Loss | Gradient | Step | Iteration | Validation | Validation | | | | | | Time (sec) | Loss | Checks | |==========================================================================================| | 11| 66.357143| 46.712988| 0.009405| 0.001130| 65.306106| 0| | 12| 66.268225| 54.079264| 0.007953| 0.001023| 65.234391| 0| | 13| 65.788550| 99.453225| 0.030942| 0.000436| 64.869708| 0| | 14| 64.821095| 186.344649| 0.048078| 0.000295| 64.191533| 0| | 15| 62.353896| 319.273873| 0.107160| 0.000290| 62.618374| 0| | 16| 57.836593| 447.826470| 0.184985| 0.000287| 60.087065| 0| | 17| 51.188884| 524.631067| 0.253062| 0.000287| 56.646294| 0| | 18| 41.755601| 189.072516| 0.318515| 0.000286| 49.046823| 0| | 19| 37.539854| 78.602559| 0.382284| 0.000290| 44.633562| 0| | 20| 36.845322| 151.837884| 0.211286| 0.000286| 47.291367| 1| |==========================================================================================| | Iteration | Train Loss | Gradient | Step | Iteration | Validation | Validation | | | | | | Time (sec) | Loss | Checks | |==========================================================================================| | 21| 36.218289| 62.826818| 0.142748| 0.000362| 46.139104| 2| | 22| 35.776921| 53.606315| 0.215188| 0.000321| 46.170460| 3| | 23| 35.729085| 24.400342| 0.060096| 0.001023| 45.318023| 4| | 24| 35.622031| 9.602277| 0.121153| 0.000289| 45.791861| 5| | 25| 35.573317| 10.735070| 0.126854| 0.000291| 46.062826| 6| |==========================================================================================|
Создайте график, который сравнивает учебную среднеквадратическую ошибку (MSE) и валидацию MSE в каждой итерации. По умолчанию, fitrnet
хранит информацию потери в TrainingHistory
свойство объекта Mdl
. Можно получить доступ к этой информации при помощи записи через точку.
iteration = Mdl.TrainingHistory.Iteration; trainLosses = Mdl.TrainingHistory.TrainingLoss; valLosses = Mdl.TrainingHistory.ValidationLoss; plot(iteration,trainLosses,iteration,valLosses) legend(["Training","Validation"]) xlabel("Iteration") ylabel("Mean Squared Error")
Проверяйте итерацию, которая соответствует минимальной валидации MSE. Финал возвратил модель Mdl
модель, обученная в этой итерации.
[~,minIdx] = min(valLosses); iteration(minIdx)
ans = 19
Оцените потерю перекрестной проверки моделей нейронной сети с различными сильными местами регуляризации и выберите силу регуляризации, соответствующую лучшей модели выполнения.
Загрузите carbig
набор данных, который содержит измерения автомобилей, сделанных в 1970-х и в начале 1980-х. Составьте таблицу, содержащую переменные предикторы Acceleration
, Displacement
, и так далее, а также переменная отклика MPG
. Удалите наблюдения из таблицы с отсутствующими значениями.
load carbig tbl = table(Acceleration,Displacement,Horsepower, ... Model_Year,Origin,Weight,MPG); cars = rmmissing(tbl);
Создайте cvpartition
объект для 5-кратной перекрестной проверки. cvp
делит данные в пять сгибов, где каждый сгиб имеет примерно то же количество наблюдений. Установите случайный seed на значение по умолчанию для воспроизводимости раздела.
rng("default") n = size(cars,1); cvp = cvpartition(n,"KFold",5);
Вычислите среднеквадратическую ошибку (MSE) перекрестной проверки для моделей регрессии нейронной сети с различными сильными местами регуляризации. Попробуйте сильные места регуляризации порядка 1/n, где n является количеством наблюдений. Задайте, чтобы стандартизировать данные перед обучением модели нейронной сети.
1/n
ans = 0.0026
lambda = (0:0.5:5)*1e-3; cvloss = zeros(length(lambda),1); for i = 1:length(lambda) cvMdl = fitrnet(cars,"MPG","Lambda",lambda(i), ... "CVPartition",cvp,"Standardize",true); cvloss(i) = kfoldLoss(cvMdl); end
Постройте график результатов. Найдите силу регуляризации, соответствующую самой низкой перекрестной проверке MSE.
plot(lambda,cvloss) xlabel("Regularization Strength") ylabel("Cross-Validation Loss")
[~,idx] = min(cvloss); bestLambda = lambda(idx)
bestLambda = 0
Обучите модель регрессии нейронной сети использование bestLambda
сила регуляризации.
Mdl = fitrnet(cars,"MPG","Lambda",bestLambda, ... "Standardize",true)
Mdl = RegressionNeuralNetwork PredictorNames: {'Acceleration' 'Displacement' 'Horsepower' 'Model_Year' 'Origin' 'Weight'} ResponseName: 'MPG' CategoricalPredictors: 5 ResponseTransform: 'none' NumObservations: 392 LayerSizes: 10 Activations: 'relu' OutputLayerActivation: 'linear' Solver: 'LBFGS' ConvergenceInfo: [1×1 struct] TrainingHistory: [1000×7 table] Properties, Methods
Создайте нейронную сеть с низкой ошибкой при помощи OptimizeHyperparameters
аргумент. Этот аргумент вызывает fitrnet
минимизировать потерю перекрестной проверки по некоторым проблемным гиперпараметрам при помощи Байесовой оптимизации.
Загрузите carbig
набор данных, который содержит измерения автомобилей, сделанных в 1970-х и в начале 1980-х. Составьте таблицу, содержащую переменные предикторы Acceleration
, Displacement
, и так далее, а также переменная отклика MPG
.
load carbig cars = table(Acceleration,Displacement,Horsepower, ... Model_Year,Origin,Weight,MPG);
Разделите данные в наборы обучающих данных и наборы тестов. Используйте приблизительно 80% наблюдений, чтобы обучить модель нейронной сети, и 20% наблюдений проверять производительность обученной модели на новых данных. Используйте cvpartition
разделить данные.
rng("default") % For reproducibility of the data partition c = cvpartition(length(MPG),"Holdout",0.20); trainingIdx = training(c); % Training set indices carsTrain = cars(trainingIdx,:); testIdx = test(c); % Test set indices carsTest = cars(testIdx,:);
Обучите нейронную сеть регрессии с помощью OptimizeHyperparameters
набор аргумента к "auto"
. Для воспроизводимости установите AcquisitionFunctionName
к "expected-improvement-plus"
в HyperparameterOptimizationOptions
структура. fitrnet
выполняет Байесовую оптимизацию по умолчанию. Чтобы использовать поиск сетки или случайный поиск, установите Optimizer
поле в HyperparameterOptimizationOptions
.
rng("default") % For reproducibility Mdl = fitrnet(carsTrain,"MPG","OptimizeHyperparameters","auto", ... "HyperparameterOptimizationOptions",struct("AcquisitionFunctionName","expected-improvement-plus"))
|============================================================================================================================================| | Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | Activations | Standardize | Lambda | LayerSizes | | | result | log(1+loss) | runtime | (observed) | (estim.) | | | | | |============================================================================================================================================| | 1 | Best | 4.1263 | 0.48557 | 4.1263 | 4.1263 | sigmoid | false | 1.2563e-07 | 1 | | 2 | Best | 3.8549 | 4.7743 | 3.8549 | 3.8657 | relu | true | 4.3473e-06 | [ 24 104 3] | | 3 | Best | 2.8583 | 13.962 | 2.8583 | 2.9128 | sigmoid | false | 0.00037254 | [221 4 77] | | 4 | Best | 2.0551 | 3.5001 | 2.0551 | 2.1322 | sigmoid | true | 0.011747 | [ 8 57] | | 5 | Accept | 2.2632 | 1.6847 | 2.0551 | 2.091 | sigmoid | true | 0.23432 | [ 8 129] | | 6 | Accept | 2.8599 | 3.377 | 2.0551 | 2.0554 | sigmoid | true | 7.257e-07 | [ 8 4] | | 7 | Best | 1.9958 | 3.1713 | 1.9958 | 1.9974 | sigmoid | true | 0.017969 | [ 9 44] | | 8 | Accept | 2.012 | 9.2651 | 1.9958 | 2.0049 | sigmoid | true | 0.017594 | [ 86 41] | | 9 | Accept | 4.1263 | 0.22076 | 1.9958 | 2.0051 | sigmoid | false | 3.2957e-08 | [ 10 255 87] | | 10 | Accept | 2.7022 | 3.7268 | 1.9958 | 2.0026 | sigmoid | true | 3.6387e-07 | [ 5 31] | | 11 | Accept | 3.7061 | 0.17177 | 1.9958 | 2.0005 | sigmoid | true | 2.1758 | [ 7 10] | | 12 | Accept | 2.5201 | 0.32516 | 1.9958 | 1.9992 | sigmoid | true | 0.058099 | [ 1 1] | | 13 | Best | 1.9626 | 7.9032 | 1.9626 | 1.9621 | sigmoid | true | 0.035919 | [ 8 269] | | 14 | Accept | 2.0158 | 5.6536 | 1.9626 | 1.9622 | sigmoid | true | 0.045802 | [ 26 89] | | 15 | Accept | 2.0023 | 28.614 | 1.9626 | 1.9645 | sigmoid | true | 0.022012 | [ 54 271 118] | | 16 | Accept | 2.5166 | 10.875 | 1.9626 | 1.9644 | sigmoid | false | 0.062997 | [228 6] | | 17 | Accept | 3.9942 | 5.4748 | 1.9626 | 1.9643 | sigmoid | false | 4.4205 | [ 18 117] | | 18 | Accept | 2.6201 | 19.846 | 1.9626 | 1.9642 | sigmoid | false | 0.0066473 | [ 60 281] | | 19 | Accept | 2.1635 | 0.72902 | 1.9626 | 1.9654 | sigmoid | true | 0.00035215 | 1 | | 20 | Accept | 2.2519 | 7.7542 | 1.9626 | 1.9658 | sigmoid | true | 6.2437e-05 | [ 3 282] | |============================================================================================================================================| | Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | Activations | Standardize | Lambda | LayerSizes | | | result | log(1+loss) | runtime | (observed) | (estim.) | | | | | |============================================================================================================================================| | 21 | Accept | 2.2298 | 6.9991 | 1.9626 | 1.9665 | sigmoid | true | 0.00046552 | [ 2 275] | | 22 | Accept | 2.4864 | 10.493 | 1.9626 | 1.9661 | none | true | 0.00020427 | [ 28 283 6] | | 23 | Accept | 2.4865 | 4.2404 | 1.9626 | 1.9663 | none | true | 0.017129 | [ 5 218 7] | | 24 | Accept | 2.4866 | 0.45603 | 1.9626 | 1.9663 | none | true | 1.7415e-06 | 185 | | 25 | Accept | 2.4866 | 0.44133 | 1.9626 | 1.9664 | none | true | 3.3056e-08 | [ 5 168] | | 26 | Accept | 2.7084 | 0.13839 | 1.9626 | 1.9664 | none | true | 2.5341 | 1 | | 27 | Accept | 2.4866 | 1.121 | 1.9626 | 1.9666 | none | true | 0.0016407 | 6 | | 28 | Accept | 6.3923 | 0.12383 | 1.9626 | 1.9662 | none | true | 267.98 | [ 11 173] | | 29 | Accept | 2.4854 | 0.58387 | 1.9626 | 1.9644 | none | true | 0.14825 | 72 | | 30 | Accept | 4.5391 | 0.26 | 1.9626 | 1.9643 | sigmoid | true | 2.4997 | [137 16 3] |
__________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 30 reached. Total function evaluations: 30 Total elapsed time: 170.8367 seconds Total objective function evaluation time: 156.371 Best observed feasible point: Activations Standardize Lambda LayerSizes ___________ ___________ ________ __________ sigmoid true 0.035919 8 269 Observed objective function value = 1.9626 Estimated objective function value = 1.9643 Function evaluation time = 7.9032 Best estimated feasible point (according to models): Activations Standardize Lambda LayerSizes ___________ ___________ ________ __________ sigmoid true 0.035919 8 269 Estimated objective function value = 1.9643 Estimated function evaluation time = 7.7102
Mdl = RegressionNeuralNetwork PredictorNames: {'Acceleration' 'Displacement' 'Horsepower' 'Model_Year' 'Origin' 'Weight'} ResponseName: 'MPG' CategoricalPredictors: 5 ResponseTransform: 'none' NumObservations: 314 HyperparameterOptimizationResults: [1×1 BayesianOptimization] LayerSizes: [8 269] Activations: 'sigmoid' OutputLayerActivation: 'linear' Solver: 'LBFGS' ConvergenceInfo: [1×1 struct] TrainingHistory: [1000×7 table] Properties, Methods
Найдите среднеквадратическую ошибку получившейся модели на наборе тестовых данных.
testMSE = loss(Mdl,carsTest,"MPG")
testMSE = 8.3808
Эта среднеквадратическая ошибка ниже, чем значение, полученное в примере, Обучает Модель Регрессии Нейронной сети, которая не использует гипероптимизацию параметров управления.
Создайте нейронную сеть с низкой ошибкой при помощи OptimizeHyperparameters
аргумент. Этот аргумент вызывает fitrnet
искать гиперпараметры, которые дают модель с низкой ошибкой перекрестной проверки. Используйте hyperparameters
функция, чтобы задать больше, чем значения по умолчанию для количества используемых слоев и область значений размера слоя.
Загрузите carbig
набор данных, который содержит измерения автомобилей, сделанных в 1970-х и в начале 1980-х. Составьте таблицу, содержащую переменные предикторы Acceleration
, Displacement
, и так далее, а также переменная отклика MPG
.
load carbig cars = table(Acceleration,Displacement,Horsepower, ... Model_Year,Origin,Weight,MPG);
Разделите данные в наборы обучающих данных и наборы тестов. Используйте приблизительно 80% наблюдений, чтобы обучить модель нейронной сети, и 20% наблюдений проверять производительность обученной модели на новых данных. Используйте cvpartition
разделить данные.
rng("default") % For reproducibility of the data partition c = cvpartition(length(MPG),"Holdout",0.20); trainingIdx = training(c); % Training set indices carsTrain = cars(trainingIdx,:); testIdx = test(c); % Test set indices carsTest = cars(testIdx,:);
Перечислите гиперпараметры, доступные для этой проблемы подбора кривой MPG
ответ.
params = hyperparameters("fitrnet",carsTrain,"MPG"); for ii = 1:length(params) disp(ii);disp(params(ii)) end
1 optimizableVariable with properties: Name: 'NumLayers' Range: [1 3] Type: 'integer' Transform: 'none' Optimize: 1 2 optimizableVariable with properties: Name: 'Activations' Range: {'relu' 'tanh' 'sigmoid' 'none'} Type: 'categorical' Transform: 'none' Optimize: 1 3 optimizableVariable with properties: Name: 'Standardize' Range: {'true' 'false'} Type: 'categorical' Transform: 'none' Optimize: 1 4 optimizableVariable with properties: Name: 'Lambda' Range: [3.0769e-08 307.6923] Type: 'real' Transform: 'log' Optimize: 1 5 optimizableVariable with properties: Name: 'LayerWeightsInitializer' Range: {'glorot' 'he'} Type: 'categorical' Transform: 'none' Optimize: 0 6 optimizableVariable with properties: Name: 'LayerBiasesInitializer' Range: {'zeros' 'ones'} Type: 'categorical' Transform: 'none' Optimize: 0 7 optimizableVariable with properties: Name: 'Layer_1_Size' Range: [1 300] Type: 'integer' Transform: 'log' Optimize: 1 8 optimizableVariable with properties: Name: 'Layer_2_Size' Range: [1 300] Type: 'integer' Transform: 'log' Optimize: 1 9 optimizableVariable with properties: Name: 'Layer_3_Size' Range: [1 300] Type: 'integer' Transform: 'log' Optimize: 1 10 optimizableVariable with properties: Name: 'Layer_4_Size' Range: [1 300] Type: 'integer' Transform: 'log' Optimize: 0 11 optimizableVariable with properties: Name: 'Layer_5_Size' Range: [1 300] Type: 'integer' Transform: 'log' Optimize: 0
Чтобы попробовать больше слоев, чем значение по умолчанию 1 - 3, установите область значений NumLayers
(optimizable переменный 1) к его максимальному допустимому размеру, [1 5]
. Кроме того, установите Layer_4_Size
и Layer_5_Size
(optimizable переменные 10 и 11, соответственно), чтобы быть оптимизированным.
params(1).Range = [1 5]; params(10).Optimize = true; params(11).Optimize = true;
Установите область значений всех размеров слоя (optimizable переменные 7 - 11) к [1 400]
вместо [1 300]
по умолчанию.
for ii = 7:11 params(ii).Range = [1 400]; end
Обучите нейронную сеть регрессии с помощью OptimizeHyperparameters
набор аргумента к params
. Для воспроизводимости установите AcquisitionFunctionName
к "expected-improvement-plus"
в HyperparameterOptimizationOptions
структура. Чтобы попытаться получить лучшее решение, определите номер шагов оптимизации к 60 вместо значения по умолчанию 30.
rng("default") % For reproducibility Mdl = fitrnet(carsTrain,"MPG","OptimizeHyperparameters",params, ... "HyperparameterOptimizationOptions", ... struct("AcquisitionFunctionName","expected-improvement-plus", ... "MaxObjectiveEvaluations",60))
|============================================================================================================================================| | Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | Activations | Standardize | Lambda | LayerSizes | | | result | log(1+loss) | runtime | (observed) | (estim.) | | | | | |============================================================================================================================================| | 1 | Best | 6.3509 | 0.24807 | 6.3509 | 6.3509 | none | true | 64.509 | [ 10 18 86] | | 2 | Best | 2.49 | 35.746 | 2.49 | 2.7984 | sigmoid | false | 0.019417 | [227 295] | | 3 | Best | 2.3991 | 4.212 | 2.3991 | 2.5128 | tanh | true | 4.9634e-05 | [ 4 3 15] | | 4 | Accept | 9.5143 | 1.4428 | 2.3991 | 2.9908 | relu | false | 0.041251 | [ 70 5] | | 5 | Accept | 2.5664 | 10.766 | 2.3991 | 2.407 | tanh | true | 6.7793e-06 | [ 6 175 16] | | 6 | Accept | 6.377 | 0.15376 | 2.3991 | 2.4016 | tanh | true | 124.58 | [ 1 78 4] | | 7 | Accept | 5.8245 | 0.32003 | 2.3991 | 2.4014 | tanh | true | 17.475 | [ 2 4 13 3] | | 8 | Accept | 4.1263 | 0.12613 | 2.3991 | 2.4012 | sigmoid | false | 8.4368e-07 | [ 7 59] | | 9 | Accept | 6.2855 | 0.40793 | 2.3991 | 2.3998 | sigmoid | false | 215.56 | [ 50 368 16] | | 10 | Accept | 3.3448 | 8.9261 | 2.3991 | 2.4 | sigmoid | false | 0.0017894 | [ 6 165 5 1 3] | | 11 | Accept | 2.5911 | 19.126 | 2.3991 | 2.4006 | sigmoid | false | 0.00054312 | [398 30] | | 12 | Accept | 3.0594 | 16.582 | 2.3991 | 2.4006 | tanh | true | 5.3406e-05 | [ 21 1 367 15] | | 13 | Accept | 2.9527 | 7.7998 | 2.3991 | 2.4012 | tanh | true | 2.4206e-05 | [ 56 2 1 27 9] | | 14 | Accept | 4.1263 | 6.2369 | 2.3991 | 2.4011 | sigmoid | false | 0.010071 | [397 1 9 399 86] | | 15 | Accept | 3.4453 | 12.751 | 2.3991 | 2.4011 | tanh | true | 7.1361e-05 | 356 | | 16 | Best | 2.1776 | 3.0766 | 2.1776 | 2.1767 | tanh | true | 2.9019e-05 | [ 1 2] | | 17 | Accept | 2.3803 | 7.45 | 2.1776 | 2.1798 | tanh | true | 4.3277e-05 | [ 1 45 4 2 54] | | 18 | Accept | 3.9641 | 0.15221 | 2.1776 | 2.1808 | tanh | true | 3.6626e-08 | 1 | | 19 | Best | 2.1775 | 3.6795 | 2.1775 | 2.179 | tanh | true | 0.00013929 | [ 1 25] | | 20 | Accept | 2.5069 | 39.351 | 2.1775 | 2.1756 | sigmoid | false | 0.0058663 | [390 81 372] | |============================================================================================================================================| | Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | Activations | Standardize | Lambda | LayerSizes | | | result | log(1+loss) | runtime | (observed) | (estim.) | | | | | |============================================================================================================================================| | 21 | Accept | 2.4049 | 8.7309 | 2.1775 | 2.1755 | tanh | true | 0.00025995 | [ 2 10 101 1 12] | | 22 | Accept | 3.002 | 4.1757 | 2.1775 | 2.176 | sigmoid | true | 5.1706e-06 | [ 25 13] | | 23 | Accept | 2.5158 | 1.3278 | 2.1775 | 2.1755 | sigmoid | true | 0.13051 | [ 1 10 3] | | 24 | Accept | 3.2086 | 16.686 | 2.1775 | 2.1759 | sigmoid | true | 0.0051978 | [ 21 71 3 41 387] | | 25 | Accept | 5.2817 | 0.70832 | 2.1775 | 2.1762 | sigmoid | true | 174.76 | [387 277] | | 26 | Best | 2.1646 | 26.15 | 2.1646 | 2.1648 | sigmoid | true | 0.0016717 | [ 1 3 226 199] | | 27 | Best | 2.1632 | 4.9067 | 2.1632 | 2.1632 | sigmoid | true | 0.001446 | [ 1 141] | | 28 | Accept | 2.6983 | 22.232 | 2.1632 | 2.1632 | sigmoid | true | 0.0028531 | [133 65 274] | | 29 | Accept | 2.1692 | 9.073 | 2.1632 | 2.1632 | sigmoid | true | 0.004914 | [ 1 232 1 131] | | 30 | Accept | 11.425 | 1.0696 | 2.1632 | 2.1631 | none | false | 3.7581e-07 | [387 248] | | 31 | Accept | 4.1263 | 0.12162 | 2.1632 | 2.1631 | tanh | false | 3.5058e-08 | [ 10 28] | | 32 | Accept | 2.5818 | 17.24 | 2.1632 | 2.1648 | tanh | false | 0.79846 | [164 99] | | 33 | Accept | 3.9462 | 34.222 | 2.1632 | 2.1631 | tanh | false | 0.19318 | [ 1 1 208 68 396] | | 34 | Accept | 4.685 | 1.3886 | 2.1632 | 2.1631 | tanh | false | 297.05 | 357 | | 35 | Accept | 2.7167 | 27.943 | 2.1632 | 2.1632 | tanh | false | 0.0017346 | [399 86 2] | | 36 | Accept | 3.6837 | 2.5068 | 2.1632 | 2.1631 | tanh | false | 0.026645 | [ 1 24 2] | | 37 | Accept | 3.278 | 24.711 | 2.1632 | 2.1631 | tanh | false | 0.097511 | [391 2 14 356 2] | | 38 | Accept | 2.1843 | 4.0151 | 2.1632 | 2.1655 | sigmoid | true | 0.0023154 | [ 1 2 4 2] | | 39 | Accept | 3.751 | 4.211 | 2.1632 | 2.1654 | relu | true | 4.9979e-07 | [ 1 205 4 4 217] | | 40 | Accept | 2.629 | 8.3458 | 2.1632 | 2.1654 | relu | true | 1.0901 | [ 2 1 294 66 371] | |============================================================================================================================================| | Iter | Eval | Objective: | Objective | BestSoFar | BestSoFar | Activations | Standardize | Lambda | LayerSizes | | | result | log(1+loss) | runtime | (observed) | (estim.) | | | | | |============================================================================================================================================| | 41 | Accept | 3.2212 | 25.465 | 2.1632 | 2.1654 | relu | true | 0.039245 | [379 134] | | 42 | Accept | 6.4054 | 0.11861 | 2.1632 | 2.1652 | relu | true | 300.49 | [ 1 1 15 64] | | 43 | Accept | 3.5449 | 38.631 | 2.1632 | 2.165 | relu | true | 0.0017749 | [207 8 25 244 323] | | 44 | Accept | 2.4957 | 9.1857 | 2.1632 | 2.1651 | relu | true | 0.015075 | [ 1 109 16 1 86] | | 45 | Accept | 2.6834 | 9.3349 | 2.1632 | 2.1651 | relu | true | 0.00033029 | [ 1 64 35 152] | | 46 | Accept | 2.4866 | 2.4383 | 2.1632 | 2.1641 | none | true | 3.5179e-08 | [ 42 308 21 138 89] | | 47 | Accept | 2.4818 | 1.3147 | 2.1632 | 2.165 | none | true | 3.1233e-08 | [ 1 2] | | 48 | Accept | 2.4866 | 1.8547 | 2.1632 | 2.1641 | none | true | 1.2947e-06 | [351 2 23 127] | | 49 | Accept | 2.487 | 5.4303 | 2.1632 | 2.1641 | none | true | 3.6638e-06 | [ 1 2 19 10 150] | | 50 | Accept | 2.4884 | 10.919 | 2.1632 | 2.1651 | none | true | 3.8721e-07 | [ 1 68 119 391 10] | | 51 | Accept | 2.4866 | 2.5134 | 2.1632 | 2.1651 | none | true | 3.473e-08 | [385 3 35] | | 52 | Accept | 2.4865 | 3.3233 | 2.1632 | 2.1643 | none | true | 7.3062e-06 | [ 1 38] | | 53 | Accept | 2.4866 | 11.504 | 2.1632 | 2.1652 | none | true | 8.1563e-07 | [215 323 10 2 133] | | 54 | Accept | 2.4048 | 16.867 | 2.1632 | 2.1652 | tanh | false | 0.048965 | [371 2 1 2 116] | | 55 | Accept | 2.164 | 7.0362 | 2.1632 | 2.1602 | sigmoid | true | 0.00052031 | [ 1 63 1 144] | | 56 | Accept | 2.4033 | 22.255 | 2.1632 | 2.1602 | tanh | false | 0.00027816 | [309 3 18 3 334] | | 57 | Accept | 2.4866 | 25.437 | 2.1632 | 2.1601 | none | true | 0.00018658 | [110 4 3 384 135] | | 58 | Accept | 3.7672 | 7.6089 | 2.1632 | 2.1601 | relu | true | 3.1276e-08 | 333 | | 59 | Accept | 3.017 | 10.556 | 2.1632 | 2.1639 | sigmoid | true | 3.2123e-07 | [ 1 19 7 11 380] | | 60 | Accept | 2.4867 | 12.416 | 2.1632 | 2.1603 | none | true | 0.00022341 | [369 27 24] |
__________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 60 reached. Total function evaluations: 60 Total elapsed time: 661.0292 seconds Total objective function evaluation time: 622.5276 Best observed feasible point: Activations Standardize Lambda LayerSizes ___________ ___________ ________ __________ sigmoid true 0.001446 1 141 Observed objective function value = 2.1632 Estimated objective function value = 2.1701 Function evaluation time = 4.9067 Best estimated feasible point (according to models): Activations Standardize Lambda LayerSizes ___________ ___________ _________ ______________________ sigmoid true 0.0016717 1 3 226 199 Estimated objective function value = 2.1603 Estimated function evaluation time = 21.7877
Mdl = RegressionNeuralNetwork PredictorNames: {'Acceleration' 'Displacement' 'Horsepower' 'Model_Year' 'Origin' 'Weight'} ResponseName: 'MPG' CategoricalPredictors: 5 ResponseTransform: 'none' NumObservations: 314 HyperparameterOptimizationResults: [1×1 BayesianOptimization] LayerSizes: [1 3 226 199] Activations: 'sigmoid' OutputLayerActivation: 'linear' Solver: 'LBFGS' ConvergenceInfo: [1×1 struct] TrainingHistory: [1000×7 table] Properties, Methods
Найдите среднеквадратическую ошибку получившейся модели на наборе тестовых данных.
testMSE = loss(Mdl,carsTest,"MPG")
testMSE = 9.2115
Эта среднеквадратическая ошибка ниже, чем значение, полученное в примере, Обучает Модель Регрессии Нейронной сети, которая не использует гипероптимизацию параметров управления.
Tbl
— Выборочные данныеВыборочные данные раньше обучали модель в виде таблицы. Каждая строка Tbl
соответствует одному наблюдению, и каждый столбец соответствует одному переменному предиктору. Опционально, Tbl
может содержать один дополнительный столбец для переменной отклика. Многостолбцовые переменные и массивы ячеек кроме массивов ячеек из символьных векторов не позволены.
Если Tbl
содержит переменную отклика, и вы хотите использовать все остающиеся переменные в Tbl
как предикторы, затем задайте переменную отклика при помощи ResponseVarName
.
Если Tbl
содержит переменную отклика, и вы хотите использовать только подмножество остающихся переменных в Tbl
как предикторы, затем задайте формулу при помощи formula
.
Если Tbl
не содержит переменную отклика, затем задает переменную отклика при помощи Y
. Длина переменной отклика и количество строк в Tbl
должно быть равным.
Типы данных: table
ResponseVarName
— Имя переменной откликаTbl
Имя переменной отклика в виде имени переменной в Tbl
. Переменная отклика должна быть числовым вектором.
Необходимо задать ResponseVarName
как вектор символов или строковый скаляр. Например, если Tbl
хранит переменную отклика Y
как Tbl.Y
, затем задайте его как 'Y'
. В противном случае программное обеспечение обрабатывает все столбцы Tbl
, включая Y
, как предикторы, когда обучение модель.
Типы данных: char |
string
formula
— Объяснительная модель переменной отклика и подмножество переменных предикторовОбъяснительная модель переменной отклика и подмножество переменных предикторов в виде вектора символов или строкового скаляра в форме "Y~x1+x2+x3"
. В этой форме, Y
представляет переменную отклика и x1
x2
, и x3
представляйте переменные предикторы.
Задавать подмножество переменных в Tbl
как предикторы для обучения модель, используйте формулу. Если вы задаете формулу, то программное обеспечение не использует переменных в Tbl
это не появляется в formula
.
Имена переменных в формуле должны быть оба именами переменных в Tbl
(Tbl.Properties.VariableNames
) и допустимый MATLAB® идентификаторы. Можно проверить имена переменных в Tbl
при помощи isvarname
функция. Если имена переменных не допустимы, то можно преобразовать их при помощи matlab.lang.makeValidName
функция.
Типы данных: char |
string
X
— Данные о предиктореДанные о предикторе раньше обучали модель в виде числовой матрицы.
По умолчанию программное обеспечение обрабатывает каждую строку X
как одно наблюдение и каждый столбец как один предиктор.
Длина Y
и количество наблюдений в X
должно быть равным.
Задавать имена предикторов в порядке их внешнего вида в X
, используйте PredictorNames
аргумент значения имени.
Примечание
Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns'
, затем вы можете испытать значительное сокращение во время вычисления.
Типы данных: single
| double
Примечание
Программное обеспечение обрабатывает NaN
, пустой символьный вектор (''
), пустая строка (""
), <missing>
, и <undefined>
элементы как отсутствующие значения, и удаляют наблюдения с любой из этих характеристик:
Отсутствующее значение в ответе (например, Y
или ValidationData
{2})
По крайней мере одно отсутствующее значение в наблюдении предиктора (например, строка в X
или ValidationData{1}
)
NaN
значение или 0
вес (например, значение в Weights
или ValidationData{3}
)
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
fitrnet(X,Y,'LayerSizes',[10 10],'Activations',["relu","tanh"])
задает, чтобы создать нейронную сеть с двумя полносвязными слоями, каждого с 10 выходными параметрами. Первый слой использует исправленный линейный модуль (ReLU) функция активации и второе использование гиперболическая функция активации касательной.LayerSizes
— Размеры полносвязных слоев
(значение по умолчанию) | положительный целочисленный векторРазмеры полносвязных слоев в модели нейронной сети в виде положительного целочисленного вектора. i th элемент LayerSizes
количество выходных параметров в i th полносвязный слой модели нейронной сети.
LayerSizes
не включает размер итогового полносвязного слоя. Для получения дополнительной информации смотрите Структуру Нейронной сети.
Пример: 'LayerSizes',[100 25 10]
Activations
— Активация функционирует для полносвязных слоев'relu'
(значение по умолчанию) | 'tanh'
| 'sigmoid'
| 'none'
| массив строк | массив ячеек из символьных векторовАктивация функционирует для полносвязных слоев модели нейронной сети в виде вектора символов, строкового скаляра, массива строк или массива ячеек из символьных векторов со значениями из этой таблицы.
Значение | Описание |
---|---|
'relu' | Исправленный линейный модуль (ReLU), функция — Выполняет пороговую операцию на каждом элементе входа, где любое значение меньше, чем нуль обнуляется, то есть, |
'tanh' | Гиперболическая касательная (tanh) функция — Применяется |
'sigmoid' | Сигмоидальная функция — Выполняет следующую операцию на каждом входном элементе: |
'none' | Тождественное отображение — Возвращает каждый входной элемент, не выполняя преобразования, то есть, f (x) = x |
Если вы указываете, что одна активация функционирует только, то Activations
функция активации для каждого полносвязного слоя модели нейронной сети, исключая итоговый полносвязный слой (см. Структуру Нейронной сети).
Если вы задаете массив функций активации, то i th элемент Activations
функция активации для i th слой модели нейронной сети.
Пример: 'Activations','sigmoid'
LayerWeightsInitializer
— Функция, чтобы инициализировать веса полносвязного слоя'glorot'
(значение по умолчанию) | 'he'
Функция, чтобы инициализировать веса полносвязного слоя в виде 'glorot'
или 'he'
.
Значение | Описание |
---|---|
'glorot' | Инициализируйте веса инициализатором Glorot [1] (также известный как инициализатор Ксавьера). Для каждого слоя, инициализатор Glorot независимо выборки от равномерного распределения с нулевым средним значением и переменной 2/(I+O) , где I входной размер и O выходной размер для слоя. |
'he' | Инициализируйте веса Им инициализатор [2]. Для каждого слоя, Он выборки инициализатора от нормального распределения с нулевым средним значением и отклонением 2/I , где I входной размер для слоя. |
Пример: 'LayerWeightsFunction','he'
LayerBiasesInitializer
— Тип начальных смещений полносвязного слоя'zeros'
(значение по умолчанию) | 'ones'
Тип начального полносвязного слоя смещает в виде 'zeros'
или 'ones'
.
Если вы задаете значение 'zeros'
, затем каждый полносвязный слой имеет начальное смещение 0.
Если вы задаете значение 'ones'
, затем каждый полносвязный слой имеет начальное смещение 1.
Пример: 'LayerBiasesInitializer','ones'
Типы данных: char |
string
ObservationsIn
— Размерность наблюдения данных о предикторе'rows'
(значение по умолчанию) | 'columns'
Размерность наблюдения данных о предикторе в виде 'rows'
или 'columns'
.
Примечание
Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns'
, затем вы можете испытать значительное сокращение во время вычисления. Вы не можете задать 'ObservationsIn','columns'
для данных о предикторе в таблице.
Пример: 'ObservationsIn','columns'
Типы данных: char |
string
Lambda
— Сила термина регуляризации
(значение по умолчанию) | неотрицательный скалярСила термина регуляризации в виде неотрицательного скаляра. Программное обеспечение составляет целевую функцию для минимизации от функции потерь среднеквадратической ошибки (MSE) и гребня (L2) термин штрафа.
Пример: 'Lambda',1e-4
Типы данных: single
| double
Standardize
— Отметьте, чтобы стандартизировать данные о предиктореfalse
или 0
(значение по умолчанию) | true
или 1
Отметьте, чтобы стандартизировать данные о предикторе в виде числового или логического 0
ложь
) или 1
TRUE
). Если вы устанавливаете Standardize
к true
, затем центры программного обеспечения и шкалы каждый числовой переменный предиктор соответствующим столбцом среднее и стандартное отклонение. Программное обеспечение не стандартизирует категориальные предикторы.
Пример: 'Standardize',true
Типы данных: single
| double
| logical
Verbose
— Уровень многословия
(значение по умолчанию) | 1
Уровень многословия в виде 0
или 1
. 'Verbose'
аргумент значения имени управляет суммой диагностической информации это fitrnet
отображения в командной строке.
Значение | Описание |
---|---|
0
| fitrnet не отображает диагностическую информацию. |
1
| fitrnet периодически информация о диагностике отображений. |
По умолчанию, StoreHistory
установлен в true
и fitrnet
хранит диагностическую информацию в Mdl
. Используйте Mdl.TrainingHistory
получить доступ к диагностической информации.
Пример: 'Verbose',1
Типы данных: single
| double
VerboseFrequency
— Частота многословной печати
(значение по умолчанию) | положительный целочисленный скалярЧастота многословной печати, которая является количеством итераций между печатью к командному окну в виде положительного целочисленного скаляра. Значение 1 указывает, чтобы распечатать диагностическую информацию в каждой итерации.
Примечание
Чтобы использовать этот аргумент значения имени, установите Verbose
к 1
.
Пример: 'VerboseFrequency',5
Типы данных: single
| double
StoreHistory
— Отметьте, чтобы сохранить учебную историюtrue
или 1
(значение по умолчанию) | false
или 0
Отметьте, чтобы сохранить учебную историю в виде числового или логического 0
ложь
) или 1
TRUE
). Если StoreHistory
установлен в true
, затем программное обеспечение хранит диагностическую информацию в Mdl
, к которому можно получить доступ при помощи Mdl.TrainingHistory
.
Пример: 'StoreHistory',false
Типы данных: single
| double
| logical
IterationLimit
— Максимальное количество учебных итераций1e3
(значение по умолчанию) | положительный целочисленный скалярМаксимальное количество учебных итераций в виде положительного целочисленного скаляра.
Программное обеспечение возвращает обученную модель независимо от того, сходится ли учебная стандартная программа успешно. Mdl.ConvergenceInfo
содержит информацию о сходимости.
Пример: 'IterationLimit',1e8
Типы данных: single
| double
GradientTolerance
— Относительный допуск градиента1e-6
(значение по умолчанию) | неотрицательный скалярОтносительный допуск градиента в виде неотрицательного скаляра.
Пусть будьте функцией потерь в учебной итерации t, будьте градиентом функции потерь относительно весов и смещений в итерации t, и будьте градиентом функции потерь в начальной точке. Если , где , затем учебный процесс завершает работу.
Пример: 'GradientTolerance',1e-5
Типы данных: single
| double
LossTolerance
— Допуск потерь1e-6
(значение по умолчанию) | неотрицательный скалярДопуск потерь в виде неотрицательного скаляра.
Если функциональная потеря в некоторой итерации меньше, чем LossTolerance
, затем учебный процесс завершает работу.
Пример: 'LossTolerance',1e-8
Типы данных: single
| double
StepTolerance
— Допуск размера шага1e-6
(значение по умолчанию) | неотрицательный скалярДопуск размера шага в виде неотрицательного скаляра.
Если размер шага в некоторой итерации меньше, чем StepTolerance
, затем учебный процесс завершает работу.
Пример: 'StepTolerance',1e-4
Типы данных: single
| double
ValidationData
— Данные о валидации для учебного обнаружения сходимостиДанные о валидации для учебного обнаружения сходимости в виде массива ячеек или таблицы.
Во время учебного процесса программное обеспечение периодически оценивает потерю валидации при помощи ValidationData
. Если потеря валидации увеличивает больше, чем ValidationPatience
времена подряд, затем программное обеспечение отключает обучение.
Можно задать ValidationData
как таблица, если вы используете таблицу Tbl
из данных о предикторе, которые содержат переменную отклика. В этом случае, ValidationData
должен содержать те же предикторы и ответ, содержавшийся в Tbl
. Программное обеспечение не применяет веса к наблюдениям, даже если Tbl
содержит вектор из весов. Чтобы задать веса, необходимо задать ValidationData
как массив ячеек.
Если вы задаете ValidationData
как массив ячеек, затем это должно иметь следующий формат:
ValidationData{1}
должен иметь совпадающий тип данных и ориентацию как данные о предикторе. Таким образом, если вы используете матрицу предиктора X
, затем ValidationData{1}
должен быть m-by-p или p-by-m матрица данных о предикторе, которые имеют ту же ориентацию как X
. Переменные предикторы в обучающих данных X
и ValidationData{1}
должен соответствовать. Точно так же, если вы используете таблицу Tbl
предиктора из данных о предикторе, затем
ValidationData{1}
должна быть таблица, содержащая те же переменные предикторы, содержавшиеся в Tbl
. Количество наблюдений в ValidationData{1}
и данные о предикторе могут варьироваться.
ValidationData{2}
должен совпадать с типом данных и форматом переменной отклика, любого Y
или ResponseVarName
. Если ValidationData{2}
массив ответов, затем он должен иметь то же число элементов как количество наблюдений в ValidationData{1}
. Если ValidationData{1}
таблица, затем ValidationData{2}
может быть имя переменной отклика в таблице. Если вы хотите использовать тот же ResponseVarName
или formula
, можно задать ValidationData{2}
как []
.
Опционально, можно задать ValidationData{3}
как m - размерный числовой вектор из весов наблюдения или имя переменной в таблице ValidationData{1}
это содержит веса наблюдения. Программное обеспечение нормирует веса с данными о валидации так, чтобы они суммировали к 1.
Если вы задаете ValidationData
и хочу отобразить потерю валидации в командной строке, установить Verbose
к 1
.
ValidationFrequency
— Количество итераций между оценками валидации
(значение по умолчанию) | положительный целочисленный скалярКоличество итераций между оценками валидации в виде положительного целочисленного скаляра. Значение 1 указывает, чтобы оценить метрики валидации в каждой итерации.
Примечание
Чтобы использовать этот аргумент значения имени, необходимо задать ValidationData
.
Пример: 'ValidationFrequency',5
Типы данных: single
| double
ValidationPatience
— Остановка условия для оценок валидации
(значение по умолчанию) | неотрицательный целочисленный скалярОстановка условия для оценок валидации в виде неотрицательного целочисленного скаляра. Учебные остановки, если потеря валидации больше или равна минимальной потере валидации, вычисленной до сих пор, ValidationPatience
времена подряд. Можно проверять Mdl.TrainingHistory
таблица, чтобы видеть рабочее общее количество времен, которых потеря валидации больше или равна минимуму (Validation Checks
).
Пример: 'ValidationPatience',10
Типы данных: single
| double
CategoricalPredictors
— Категориальный список предикторов'all'
Категориальные предикторы перечисляют в виде одного из значений в этой таблице. Описания принимают, что данные о предикторе имеют наблюдения в строках и предикторы в столбцах.
Значение | Описание |
---|---|
Вектор из положительных целых чисел |
Каждая запись в векторе является значением индекса, указывающим, что соответствующий предиктор является категориальным. Значения индекса между 1 и Если |
Логический вектор |
|
Символьная матрица | Каждая строка матрицы является именем переменного предиктора. Имена должны совпадать с записями в PredictorNames . Заполните имена дополнительными пробелами, таким образом, каждая строка символьной матрицы имеет ту же длину. |
Массив строк или массив ячеек из символьных векторов | Каждым элементом в массиве является имя переменного предиктора. Имена должны совпадать с записями в PredictorNames . |
"all" | Все предикторы являются категориальными. |
По умолчанию, если данные о предикторе находятся в таблице (Tbl
), fitrnet
принимает, что переменная является категориальной, если это - логический вектор, категориальный вектор, символьный массив, массив строк или массив ячеек из символьных векторов. Если данные о предикторе являются матрицей (X
), fitrnet
принимает, что все предикторы непрерывны. Чтобы идентифицировать любые другие предикторы как категориальные предикторы, задайте их при помощи 'CategoricalPredictors'
аргумент значения имени.
Для идентифицированных категориальных предикторов, fitrnet
создает фиктивные переменные с помощью двух различных схем, в зависимости от того, не упорядочена ли категориальная переменная или упорядочена. Для неупорядоченной категориальной переменной, fitrnet
создает одну фиктивную переменную для каждого уровня категориальной переменной. Для упорядоченной категориальной переменной, fitrnet
создает тот меньше фиктивной переменной, чем количество категорий. Для получения дополнительной информации смотрите Автоматическое Создание Фиктивных Переменных.
Пример: 'CategoricalPredictors','all'
Типы данных: single
| double
| logical
| char
| string
| cell
PredictorNames
— Имена переменного предиктораПеременный предиктор называет в виде массива строк уникальных имен или массива ячеек уникальных векторов символов. Функциональность 'PredictorNames'
зависит от способа, которым вы снабжаете обучающими данными.
Если вы предоставляете X
и Y
, затем можно использовать 'PredictorNames'
присваивать имена к переменным предикторам в X
.
Порядок имен в PredictorNames
должен соответствовать порядку предиктора в X
. Принятие, что X
имеет ориентацию по умолчанию, с наблюдениями в строках и предикторами в столбцах, PredictorNames{1}
имя X(:,1)
, PredictorNames{2}
имя X(:,2)
, и так далее. Кроме того, size(X,2)
и numel(PredictorNames)
должно быть равным.
По умолчанию, PredictorNames
{'x1','x2',...}
.
Если вы предоставляете Tbl
, затем можно использовать 'PredictorNames'
выбрать который переменные предикторы использовать в обучении. Таким образом, fitrnet
использование только переменные предикторы в PredictorNames
и переменная отклика во время обучения.
PredictorNames
должно быть подмножество Tbl.Properties.VariableNames
и не может включать имя переменной отклика.
По умолчанию, PredictorNames
содержит имена всех переменных предикторов.
Хорошая практика должна задать предикторы для обучения с помощью любого 'PredictorNames'
или formula
, но не то и другое одновременно.
Пример: 'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}
Типы данных: string
| cell
ResponseName
— Имя переменной отклика"Y"
(значение по умолчанию) | вектор символов | строковый скалярИмя переменной отклика в виде вектора символов или строкового скаляра.
Если вы предоставляете Y
, затем можно использовать ResponseName
задавать имя для переменной отклика.
Если вы предоставляете ResponseVarName
или formula
, затем вы не можете использовать ResponseName
.
Пример: "ResponseName","response"
Типы данных: char |
string
Weights
— Веса наблюденияTbl
Веса наблюдения в виде неотрицательного числового вектора или имени переменной в Tbl
. Веса программного обеспечения каждое наблюдение в X
или Tbl
с соответствующим значением в Weights
. Длина Weights
должен равняться количеству наблюдений в X
или Tbl
.
Если вы задаете входные данные как таблицу Tbl
, затем Weights
может быть имя переменной в Tbl
это содержит числовой вектор. В этом случае необходимо задать Weights
как вектор символов или строковый скаляр. Например, если вектор весов W
хранится как Tbl.W
, затем задайте его как 'W'
. В противном случае программное обеспечение обрабатывает все столбцы Tbl
, включая W
, как предикторы, когда обучение модель.
По умолчанию, Weights
ones(n,1)
, где n
количество наблюдений в X
или Tbl
.
fitrnet
нормирует веса, чтобы суммировать к 1.
Типы данных: single
| double
| char
| string
Примечание
Вы не можете использовать аргумент значения имени перекрестной проверки вместе с 'OptimizeHyperparameters'
аргумент значения имени. Можно изменить перекрестную проверку для 'OptimizeHyperparameters'
только при помощи 'HyperparameterOptimizationOptions'
аргумент значения имени.
CrossVal
— Отметьте, чтобы обучить перекрестную подтвержденную модель'off'
(значение по умолчанию) | 'on'
Отметьте, чтобы обучить перекрестную подтвержденную модель в виде 'on'
или 'off'
.
Если вы задаете 'on'
, затем программное обеспечение обучает перекрестную подтвержденную модель с 10 сгибами.
Можно заменить эту установку перекрестной проверки с помощью CVPartition
, Holdout
, KFold
, или Leaveout
аргумент значения имени. Можно использовать только один аргумент значения имени перекрестной проверки за один раз, чтобы создать перекрестную подтвержденную модель.
В качестве альтернативы перекрестный подтвердите позже путем передачи Mdl
к crossval
.
Пример: 'Crossval','on'
Типы данных: char |
string
CVPartition
— Раздел перекрестной проверки[]
(значение по умолчанию) | cvpartition
объект разделаРаздел перекрестной проверки в виде cvpartition
объект раздела, созданный cvpartition
. Объект раздела задает тип перекрестной проверки и индексации для наборов обучения и валидации.
Чтобы создать перекрестную подтвержденную модель, можно задать только одни из этих четырех аргументов name-value: CVPartition
, Holdout
, KFold
, или Leaveout
.
Пример: Предположим, что вы создаете случайный раздел для 5-кратной перекрестной проверки на 500 наблюдениях при помощи cvp = cvpartition(500,'KFold',5)
. Затем можно задать перекрестную подтвержденную модель при помощи 'CVPartition',cvp
.
Holdout
— Часть данных для валидации затяжкиЧасть данных, используемых для валидации затяжки в виде скалярного значения в области значений (0,1). Если вы задаете 'Holdout',p
, затем программное обеспечение завершает эти шаги:
Случайным образом выберите и зарезервируйте p*100
% из данных как данные о валидации, и обучают модель с помощью остальной части данных.
Сохраните компактную, обученную модель в Trained
свойство перекрестной подтвержденной модели.
Чтобы создать перекрестную подтвержденную модель, можно задать только одни из этих четырех аргументов name-value: CVPartition
, Holdout
, KFold
, или Leaveout
.
Пример: 'Holdout',0.1
Типы данных: double |
single
KFold
— Количество сгибов
(значение по умолчанию) | положительное целочисленное значение, больше, чем 1Количество сгибов, чтобы использовать в перекрестной подтвержденной модели в виде положительного целочисленного значения, больше, чем 1. Если вы задаете 'KFold',k
, затем программное обеспечение завершает эти шаги:
Случайным образом разделите данные в k
наборы.
Для каждого набора зарезервируйте набор как данные о валидации и обучите модель с помощью другого k
– 1 набор.
Сохраните k
компактные, обученные модели в k
- 1 вектор ячейки в Trained
свойство перекрестной подтвержденной модели.
Чтобы создать перекрестную подтвержденную модель, можно задать только одни из этих четырех аргументов name-value: CVPartition
, Holdout
, KFold
, или Leaveout
.
Пример: 'KFold',5
Типы данных: single
| double
Leaveout
— Флаг перекрестной проверки "Пропускает один"'off'
(значение по умолчанию) | 'on'
Флаг перекрестной проверки "Пропускает один" в виде 'on'
или 'off'
. Если вы задаете 'Leaveout','on'
, затем для каждого из наблюдений n (где n является количеством наблюдений, исключая недостающие наблюдения, заданные в NumObservations
свойство модели), программное обеспечение завершает эти шаги:
Зарезервируйте одно наблюдение как данные о валидации и обучите модель с помощью другого n – 1 наблюдение.
Сохраните n компактные, обученные модели в n-by-1 вектор ячейки в Trained
свойство перекрестной подтвержденной модели.
Чтобы создать перекрестную подтвержденную модель, можно задать только одни из этих четырех аргументов name-value: CVPartition
, Holdout
, KFold
, или Leaveout
.
Пример: 'Leaveout','on'
OptimizeHyperparameters
— Параметры, чтобы оптимизировать'none'
(значение по умолчанию) | 'auto'
| 'all'
| массив строк или массив ячеек имеющих право названий параметра | вектор из optimizableVariable
объектыПараметры, чтобы оптимизировать в виде одного из следующего:
'none'
— Не оптимизировать.
'auto'
— Используйте {'Activations','Lambda','LayerSizes','Standardize'}
.
'all'
— Оптимизируйте все имеющие право параметры.
Массив строк или массив ячеек имеющих право названий параметра.
Вектор из optimizableVariable
объекты, обычно выход hyperparameters
.
Оптимизация пытается минимизировать потерю перекрестной проверки (ошибка) для fitrnet
путем варьирования параметров. Чтобы управлять типом перекрестной проверки и другими аспектами оптимизации, используйте HyperparameterOptimizationOptions
аргумент значения имени.
Примечание
Значения 'OptimizeHyperparameters'
замените любые значения, вы задаете использование других аргументов name-value. Например, установка 'OptimizeHyperparameters'
к 'auto'
причины fitrnet
оптимизировать гиперпараметры, соответствующие 'auto'
опция и проигнорировать любые заданные значения для гиперпараметров.
Имеющие право параметры для fitrnet
:
Activations
— fitrnet
оптимизирует Activations
на множестве {'relu','tanh','sigmoid','none'}
.
Lambda
— fitrnet
оптимизирует Lambda
по непрерывным значениям в области значений [1e-5,1e5]/NumObservations
, то, где значение выбрано однородно в журнале, преобразовало область значений.
LayerBiasesInitializer
— fitrnet
оптимизирует LayerBiasesInitializer
по этим двум значениям {'zeros','ones'}
.
LayerWeightsInitializer
— fitrnet
оптимизирует LayerWeightsInitializer
по этим двум значениям {'glorot','he'}
.
LayerSizes
— fitrnet
оптимизирует по этим трем значениям 1
, 2, и
3
полносвязные слоя, исключая итоговый полносвязный слой. fitrnet
оптимизирует каждый полносвязный слой отдельно по 1
через 300
размеры в слое, произведенном на логарифмическом масштабе.
Примечание
Когда вы используете LayerSizes
аргумент, итеративное отображение показывает размер каждого соответствующего слоя. Например, если текущим количеством полносвязных слоев является 3
, и эти три слоя имеют размеры 10
, 79, и
44
соответственно, итеративное отображение показывает LayerSizes
для той итерации как [10 79 44]
.
Примечание
Чтобы получить доступ к пяти полносвязным слоям или различной области значений размеров в слое, использовать hyperparameters
выбрать optimizable параметры и области значений.
Standardize
— fitrnet
оптимизирует Standardize
по этим двум значениям {true,false}
.
Установите параметры не по умолчанию путем передачи вектора из optimizableVariable
объекты, которые имеют значения не по умолчанию. Как пример, это кодовые наборы область значений NumLayers
к [1 5]
и оптимизирует Layer_4_Size
и Layer_5_Size
:
load carsmall params = hyperparameters('fitrtree',[Horsepower,Weight],MPG); params(1).Range = [1 5]; params(10).Optimize = true; params(11).Optimize = true;
Передайте params
как значение OptimizeHyperparameters
. Для примера смотрите Пользовательскую Гипероптимизацию параметров управления в Нейронной сети.
По умолчанию итеративное отображение появляется в командной строке, и графики появляются согласно количеству гиперпараметров в оптимизации. Для оптимизации и графиков, целевая функция является журналом (1 + потеря перекрестной проверки). Чтобы управлять итеративным отображением, установите Verbose
поле 'HyperparameterOptimizationOptions'
аргумент значения имени. Чтобы управлять графиками, установите ShowPlots
поле 'HyperparameterOptimizationOptions'
аргумент значения имени.
Для примера смотрите, Минимизируют Ошибку Перекрестной проверки в Нейронной сети.
Пример: 'OptimizeHyperparameters','auto'
HyperparameterOptimizationOptions
— Опции для оптимизацииОпции для оптимизации в виде структуры. Этот аргумент изменяет эффект OptimizeHyperparameters
аргумент значения имени. Все поля в структуре являются дополнительными.
Имя поля | Значения | Значение по умолчанию |
---|---|---|
Optimizer |
| 'bayesopt' |
AcquisitionFunctionName |
Захват функционирует, чьи имена включают | 'expected-improvement-per-second-plus' |
MaxObjectiveEvaluations | Максимальное количество оценок целевой функции. | 30 для 'bayesopt' и 'randomsearch' , и целая сетка для 'gridsearch' |
MaxTime | Ограничение по времени в виде положительного действительного скаляра. Ограничение по времени находится в секундах, как измерено | Inf |
NumGridDivisions | Для 'gridsearch' , количество значений в каждой размерности. Значение может быть вектором из положительных целых чисел, дающих количество значений для каждой размерности или скаляр, который применяется ко всем размерностям. Это поле проигнорировано для категориальных переменных. | 10
|
ShowPlots | Логическое значение, указывающее, показать ли графики. Если true , это поле строит лучшее наблюдаемое значение целевой функции против номера итерации. Если вы используете Байесовую оптимизацию (Optimizer 'bayesopt' ), затем это поле также строит лучшее предполагаемое значение целевой функции. Лучшие наблюдаемые значения целевой функции и лучше всего оцененные значения целевой функции соответствуют значениям в BestSoFar (observed) и BestSoFar (estim.) столбцы итеративного отображения, соответственно. Можно найти эти значения в свойствах ObjectiveMinimumTrace и EstimatedObjectiveMinimumTrace из Mdl.HyperparameterOptimizationResults . Если проблема включает один или два параметра оптимизации для Байесовой оптимизации, то ShowPlots также строит модель целевой функции против параметров. | true |
SaveIntermediateResults | Логическое значение, указывающее, сохранить ли результаты когда Optimizer 'bayesopt' . Если true , это поле перезаписывает переменную рабочей области под названием 'BayesoptResults' в каждой итерации. Переменной является BayesianOptimization объект. | false |
Verbose | Отображение в командной строке:
Для получения дополнительной информации смотрите | 1
|
UseParallel | Логическое значение, указывающее, запустить ли Байесовую оптимизацию параллельно, которая требует Parallel Computing Toolbox™. Из-за невоспроизводимости синхронизации параллели, параллельная Байесова оптимизация не обязательно приводит к восстанавливаемым результатам. Для получения дополнительной информации смотрите Параллельную Байесовую Оптимизацию. | false |
Repartition | Логическое значение, указывающее, повторно разделить ли перекрестную проверку в каждой итерации. Если этим полем является Установка | false |
Используйте не больше, чем одну из следующих трех опций. | ||
CVPartition | cvpartition объект, как создано cvpartition | 'Kfold',5 если вы не задаете поле перекрестной проверки |
Holdout | Скаляр в области значений (0,1) представление части затяжки | |
Kfold | Целое число, больше, чем 1 |
Пример: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)
Типы данных: struct
Mdl
— Обученная модель регрессии нейронной сетиRegressionNeuralNetwork
возразите | RegressionPartitionedModel
объектОбученная модель регрессии нейронной сети, возвращенная как RegressionNeuralNetwork
или RegressionPartitionedModel
объект.
Если вы устанавливаете какие-либо из аргументов name-value CrossVal
, CVPartition
, Holdout
, KFold
, или Leaveout
, затем Mdl
RegressionPartitionedModel
объект. В противном случае, Mdl
RegressionNeuralNetwork
модель.
К ссылочным свойствам Mdl
, используйте запись через точку.
Модель регрессии нейронной сети по умолчанию имеет следующую структуру слоя.
Структура | Описание |
---|---|
| Введите — Этот слой соответствует данным о предикторе в Tbl или X . |
Первый полносвязный слой — Этот слой имеет 10 выходных параметров по умолчанию.
| |
Функция активации ReLU —
| |
Итоговый полносвязный слой — Этот слой имеет тот выход.
| |
Вывод Этот слой соответствует предсказанным значениям отклика. |
Для примера, который показывает, как модель нейронной сети регрессии с этой структурой слоя возвращает предсказания, смотрите, Предсказывают Используя Структуру Слоя Модели Нейронной сети Регрессии.
Всегда пытайтесь стандартизировать числовые предикторы (см. Standardize
). Стандартизация делает предикторы нечувствительными к шкалам, по которым они измеряются.
fitrnet
использует ограниченную память алгоритм квазиньютона Бройдена Флетчера Голдфарба Шэнно (LBFGS) [3] как его метод минимизации функции потерь, где программное обеспечение минимизирует среднеквадратическую ошибку (MSE).
[1] Glorot, Ксавьер и Иосуа Бенхио. “Изучая трудность учебных глубоких нейронных сетей прямого распространения”. В Продолжениях тринадцатой международной конференции по вопросам искусственного интеллекта и статистики, стр 249–256. 2010.
[2] Он, Kaiming, Сянюй Чжан, Шаоцин Жэнь и Цзянь Сунь. “Копаясь глубоко в выпрямителях: Превосходная эффективность человеческого уровня на imagenet классификации”. В Продолжениях международной конференции IEEE по вопросам компьютерного зрения, стр 1026–1034. 2015.
[3] Nocedal, J. и С. Дж. Райт. Числовая Оптимизация, 2-й редактор, Нью-Йорк: Спрингер, 2006.
Чтобы выполнить параллельную гипероптимизацию параметров управления, используйте 'HyperparameterOptimizationOptions', struct('UseParallel',true)
аргумент значения имени в вызове fitrnet
функция.
Для получения дополнительной информации о параллельной гипероптимизации параметров управления смотрите Параллельную Байесовую Оптимизацию.
Для получения общей информации о параллельных вычислениях, смотрите функции MATLAB Запуска с Автоматической Параллельной Поддержкой (Parallel Computing Toolbox).
RegressionNeuralNetwork
| predict
| loss
| hyperparameters
| RegressionPartitionedModel
| CompactRegressionNeuralNetwork
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.