Отслеживайте процесс обучения обучения

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

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

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

  • Сглаженная точность обучения - сглаженная точность обучения, получаемая путем применения алгоритма сглаживания к точности обучения. Он менее шумен, чем немодированная точность, что облегчает определение трендов.

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

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

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

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

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

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

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

Стройте графики процесса обучения во время обучения

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

Загрузите обучающие данные, которые содержат 5000 изображений цифр. Выделите 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);

См. также

|

Похожие темы