Контролируйте процесс обучения глубокого обучения

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

Когда вы задаете 'training-progress' как 'Plots' значение в trainingOptions и запустите сетевое обучение, trainNetwork создает фигуру и отображает учебные метрики в каждой итерации. Каждая итерация является оценкой градиента и обновлением сетевых параметров. Если вы задаете данные о валидации в trainingOptions, затем рисунок показывает метрики валидации каждый раз trainNetwork проверяет сеть. Фигура строит следующее:

  • Учебная точность — точность Классификации на каждом отдельном мини-пакете.

  • Сглаживавшая учебная точность — Сглаживавшая учебная точность, полученная путем применения алгоритма сглаживания для учебной точности. Это является менее шумным, чем не сглаживавшая точность, облегчая определять тренды.

  • Точность валидации — точность Классификации на целом наборе валидации (заданное использование trainingOptions).

  • Учебная потеря, сглаживавшая учебная потеря и потеря валидации потеря на каждом мини-пакете, его сглаживавшей версии и потере на наборе валидации, соответственно. Если последним слоем вашей сети является classificationLayer, затем функция потерь является потерей перекрестной энтропии. Для получения дополнительной информации о функциях потерь для классификации и проблем регрессии, смотрите Выходные Слои.

Для сетей регрессии фигура строит среднеквадратичную ошибку (RMSE) вместо точности.

Фигура отмечает каждую учебную Эпоху с помощью теневого фона. Эпоха является полным прохождением всего набора данных.

Во время обучения можно остановить обучение и возвратить текущее состояние сети путем нажатия кнопки остановки в верхнем правом углу. Например, вы можете хотеть остановить обучение, когда точность сети достигает плато, и ясно, что точность больше не улучшается. После того, как вы нажмете кнопку остановки, она может требовать времени для обучения завершиться. Если обучение завершено, trainNetwork возвращает обучивший сеть.

Когда обучение закончится, просмотрите Результаты, показывающие завершенную точность валидации и причину завершения обучения. Если 'OutputNetwork' опция обучения установлена в 'last-iteration' (значение по умолчанию), завершенные метрики соответствуют последней учебной итерации. Если 'OutputNetwork' опция обучения установлена в 'best-validation-loss', завершенные метрики соответствуют итерации с самой низкой потерей валидации. Итерация, от которой вычисляются итоговые метрики валидации, помечена Final в графиках.

Если ваша сеть содержит слои нормализации партии., то итоговые метрики валидации могут отличаться от метрик валидации, оцененных во время обучения. Это вызвано тем, что среднее значение и статистика отклонения, используемая для нормализации партии., могут отличаться после того, как обучение завершится. Например, если 'BatchNormalizationStatisics' опцией обучения является 'population', затем после обучения, программное обеспечение завершает статистику нормализации партии. путем прохождения через обучающие данные еще раз и использует получившееся среднее значение и отклонение. Если 'BatchNormalizationStatisics' опцией обучения является 'moving', затем программное обеспечение аппроксимирует статистику во время обучения с помощью рабочей оценки и использует последние значения статистики.

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

Постройте процесс обучения во время обучения

Обучите сеть и постройте процесс обучения во время обучения.

Загрузите обучающие данные, который содержит 5 000 изображений цифр. Отложите 1000 из изображений для сетевой валидации.

[XTrain,YTrain] = digitTrain4DArrayData;

idx = randperm(size(XTrain,4),1000);
XValidation = XTrain(:,:,:,idx);
XTrain(:,:,:,idx) = [];
YValidation = YTrain(idx);
YTrain(idx) = [];

Создайте сеть, чтобы классифицировать данные изображения цифры.

layers = [
    imageInputLayer([28 28 1])
    
    convolution2dLayer(3,8,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,16,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,32,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

Задайте опции для сетевого обучения. Чтобы проверить сеть равномерно во время обучения, задайте данные о валидации. Выберите 'ValidationFrequency' значение так, чтобы сеть была проверена об однажды в эпоху. Чтобы построить процесс обучения во время обучения, задайте 'training-progress' как 'Plots' значение.

options = trainingOptions('sgdm', ...
    'MaxEpochs',8, ...
    'ValidationData',{XValidation,YValidation}, ...
    'ValidationFrequency',30, ...
    'Verbose',false, ...
    'Plots','training-progress');

Обучите сеть.

net = trainNetwork(XTrain,YTrain,layers,options);

Figure Training Progress (25-Aug-2021 07:33:16) contains 2 axes objects and another object of type uigridlayout. Axes object 1 contains 15 objects of type patch, text, line. Axes object 2 contains 15 objects of type patch, text, line.

Смотрите также

|

Похожие темы