Вы находитесь на странице: 1из 2

14.02.

2024, 23:50 Анализируйте производительность мелкой нейронной сети после обучения

Анализируйте производительность мелкой нейронной сети после обучения


​ асть типичного рабочего процесса мелкой нейронной сети. Дополнительные сведения и другие действия см. в разделах « Многослойные
В этом разделе представлена ч
неглубокие нейронные сети и обучение обратному распространению ошибки» . Чтобы узнать, как отслеживать прогресс обучения глубокому обучению, см. раздел
Мониторинг прогресса обучения глубокому обучению .

Когда обучение по обучению и применению многослойных неглубоких нейронных сетей будет завершено, вы сможете проверить производительность сети и определить,
необходимо ли внести какие-либо изменения в процесс обучения, архитектуру сети или наборы данных. Сначала проверьтезапись обучения, trкоторая была вторым
аргументом, возвращаемым функцией обучения.

тр

tr = структура с полями:
trainFcn: 'trainlm'
trainParam: [структура 1x1]
PerformFcn: 'mse'
PerformParam: [структура 1x1]
derivFcn: 'defaultderiv'
divFcn: 'dividerand'
diverMode: 'выборка'
divParam: [структура 1x1]
trainInd : [2 3 5 6 9 10 11 13 14 15 18 19 20 22 23 24 25 29 30 31 33 35 36 38 39 40 41 44 45 46 47 48 49 50 51 52 54 55 56 57 58 59 62 64
8 17 21 27 28 34 43 63 71 72 74 75 83 106 124 125 134 140 155 157 158 162 165 166 175 177 181 187 191 196 201 205 212 233 243 245 250]
testInd: [4 7 12 16 26 32 37 42 53 6 0 61 67 69 78 82 87 89 104 105 110 111 112 133 135 149 151 153 163 170 189 203 216 217 222 226 235 2
Стоп:
«
Обучение закончено: 1 1 1 NaN 1 1 1 1 NaN NaN NaN 1 1 1 NaN 1 NaN 1 1 NaN 1 1 1 1 NaN NaN 1 1 1 1 1 1 1 1 1 NaN 1 1 1 1 1 1 NaN NaN 1
valMask: {[1 NaN NaN NaN NaN NaN NaN 1 NaN NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN NaN 1 NaN NaN NaN NaN NaN 1 1 NaN NaN NaN NaN NaN 1 NaN
testMask: {[NaN NaN NaN 1 NaN NaN 1 NaN NaN NaN NaN 1 NaN NaN NaN 1 NaN NaN NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN NaN NaN NaN 1 NaN NaN Na
best_epoch: 3
цель: 0
States: {'epoch' 'time' 'perf' 'vperf' 'tperf' 'mu' 'gradient' 'val_fail'}
epoch: [ 0 1 2 3 4 5 6 7 8 9]
время: [5,5565 5,8509 5,8843 5,9403 6,0588 6,0949 6,1560 6,1997 6,2337 6,2632]
производительность: [672,2031 94,8128 43,7489 1 2.3078 9.7063 8.9212 8.0412 7.3500 6.7890 6.3064]
vperf: [675.3788 76.9621 74.0752 16.6857 19.9424 23.4096 26.6791 29.1562 31.1592 32.9227]
tperf: [599.2224 97.7009 79.1240 24.1796 31.6290 38.4484 42.7637 44.4194 44.8848 44.3171]
mu: [1.0000e-03 0.0100 0.0100 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000 0.1000]
gradient: [2.4114e+03 867.8889 301.7333 142.1049 12.4011 85.0504 49.4147 17.4011 15.7749 14.6346 ]
val_fail: [0 0 0 0 1 2 3 4 5 6]
best_perf: 12.3078
best_vperf: 16.6857
best_tperf: 24.1796

Эта структура содержит всю информацию, касающуюся обучения сети. Например, tr.trainIndи tr.valIndсодержат tr.testIndиндексы точек данных, которые
использовались в обучающем, проверочном и тестовом наборах соответственно. Если вы хотите переобучить сеть, используя то же разделение данных, вы можете
установить net.divideFcn, 'divideInd'to , net.divideParam.trainIndto , to .tr.trainIndnet.divideParam.valIndtr.valIndnet.divideParam.testIndtr.testInd

Структура trтакже отслеживает несколько переменных в ходе обучения, таких как значение функции производительности, величина градиента и т. д. Вы можете
использовать запись обучения для построения графика прогресса производительности с помощью команды plotperf:

плотперф (тр)

Свойство tr.best_epochуказывает итерацию, на которой производительность проверки достигла минимума. Обучение продолжалось еще 6 итераций, прежде чем
обучение было остановлено.

Эта цифра не указывает на какие-либо серьезные проблемы с обучением. Кривые валидации и тестирования очень похожи. Если тестовая кривая значительно
увеличилась до того, как увеличилась кривая проверки, возможно, произошло некоторое переобучение.

Следующим шагом в проверке сети является создание графика регрессии, который показывает взаимосвязь между выходными данными сети и целями. Если бы
обучение было идеальным, выходные данные сети и цели были бы абсолютно равными, но на практике отношения редко бывают идеальными. Для примера жировых
отложений мы можем создать график регрессии с помощью следующих команд. Первая команда вычисляет реакцию обученной сети на все входные данные в наборе

https://www.mathworks.com/help/deeplearning/ug/analyze-neural-network-performance-after-training.html 1/2
14.02.2024, 23:50 Анализируйте производительность мелкой нейронной сети после обучения
данных. Следующие шесть команд извлекают выходные данные и цели, принадлежащие подмножествам обучения, проверки и тестирования. Последняя команда
создает три графика регрессии для обучения, тестирования и проверки.

bodyfatOutputs = сеть (bodyfatInputs);


trOut = bodyfatOutputs(tr.trainInd);
vOut = bodyfatOutputs(tr.valInd);
tsOut = bodyfatOutputs(tr.testInd);
trTarg = bodyfatTargets(tr.trainInd);
vTarg = bodyfatTargets(tr.valInd);
tsTarg = bodyfatTargets(tr.testInd);
сюжетрегрессия (trTarg, trOut, 'Train' , vTarg, vOut, 'Проверка' , tsTarg, tsOut, 'Тестирование' )

Три графика представляют данные обучения, проверки и тестирования. Пунктирная линия на каждом графике представляет идеальный результат – результаты = цели.
Сплошная линия представляет собой наиболее подходящую линию линейной регрессии между результатами и целями. Значение R является показателем взаимосвязи
между результатами и целями. Если R = 1, это указывает на наличие точной линейной зависимости между результатами и целями. Если R близок к нулю, то между
результатами и целями нет линейной зависимости.

Для этого примера данные обучения указывают на хорошее соответствие. Результаты валидации и испытаний также показывают большие значения R. Диаграмма
рассеяния помогает показать, что определенные точки данных плохо подходят. Например, в тестовом наборе есть точка данных, выход сети которой близок к 35, в то
время как соответствующее целевое значение составляет около 12. Следующим шагом будет исследование этой точки данных, чтобы определить, представляет ли она
экстраполяцию (т. е. является ли она вне набора обучающих данных). Если да, то его следует включить в обучающий набор и собрать дополнительные данные для
использования в тестовом наборе.

Улучшение результатов
Если сеть недостаточно точна, вы можете попробовать инициализировать сеть и обучение еще раз. Каждый раз, когда вы инициализируете сеть прямого
распространения, параметры сети различны и могут давать разные решения.

сеть = инициализация (сеть);


сеть = поезд (сеть, bodyfatInputs, bodyfatTargets);

В качестве второго подхода вы можете увеличить количество скрытых нейронов выше 20. Большее количество нейронов в скрытом слое дает сети большую гибкость,
поскольку сеть имеет больше параметров, которые она может оптимизировать. (Постепенно увеличивайте размер слоя. Если вы сделаете скрытый слой слишком
большим, это может привести к тому, что проблема будет недостаточно охарактеризована, и сети придется оптимизировать больше параметров, чем имеется векторов
данных, чтобы ограничить эти параметры.)

Третий вариант — попробовать другую функцию обучения. Обучение байесовской регуляризации с помощью trainbr, например, иногда может обеспечить лучшую
способность к обобщению, чем использование ранней остановки.

Наконец, попробуйте использовать дополнительные данные обучения. Предоставление дополнительных данных для сети с большей вероятностью приведет к созданию
сети, которая хорошо обобщает новые данные.

https://www.mathworks.com/help/deeplearning/ug/analyze-neural-network-performance-after-training.html 2/2

Вам также может понравиться