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

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

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

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

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

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

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

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

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

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

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

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

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

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

Загрузите данные тренировки, который содержит 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);

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

|

Похожие темы