Обучить нейронной сети глубокого обучения
Для задач классификации и регрессии можно обучить различные типы нейронных сетей с помощью trainNetwork функция.
Например, можно обучить:
сверточная нейронная сеть (ConvNet, CNN) для данных изображения
рекуррентная нейронная сеть (RNN), такая как долговременная кратковременная память (LSTM) или сеть с стробируемым рекуррентным блоком (GRU) для данных последовательности и временных рядов
многоуровневая сеть перцептрона (MLP) для цифровых данных о характеристиках
Вы можете обучаться либо на CPU, либо на GPU. Для классификации изображений и регрессии изображений можно параллельно обучать одну сеть, используя несколько графических процессоров или локальный или удаленный параллельный пул. Обучение на GPU или параллельно требует Toolbox™ параллельных вычислений. Чтобы использовать графический процессор для глубокого обучения, необходимо также иметь поддерживаемое устройство графического процессора. Сведения о поддерживаемых устройствах см. в разделе Поддержка графического процессора по выпуску (Parallel Computing Toolbox). Чтобы указать параметры обучения, включая параметры среды выполнения, используйте trainingOptions функция.
При обучении нейронной сети можно указать предикторы и ответы как один вход или в два отдельных входа.
Загрузка данных как ImageDatastore объект.
digitDatasetPath = fullfile(matlabroot,'toolbox','nnet', ... 'nndemos','nndatasets','DigitDataset'); imds = imageDatastore(digitDatasetPath, ... 'IncludeSubfolders',true, ... 'LabelSource','foldernames');
Хранилище данных содержит 10 000 синтетических изображений цифр от 0 до 9. Изображения генерируются путем применения случайных преобразований к цифровым изображениям, созданным различными шрифтами. Каждая цифра изображения составляет 28 на 28 пикселей. Хранилище данных содержит равное количество изображений для каждой категории.
Отображение некоторых изображений в хранилище данных.
figure numImages = 10000; perm = randperm(numImages,20); for i = 1:20 subplot(4,5,i); imshow(imds.Files{perm(i)}); drawnow; end

Разделите хранилище данных таким образом, чтобы в каждой категории обучающего набора было 750 изображений, а в тестовом наборе - оставшиеся изображения с каждой метки.
numTrainingFiles = 750;
[imdsTrain,imdsTest] = splitEachLabel(imds,numTrainingFiles,'randomize');splitEachLabel разделяет файлы изображений в digitData в два новых хранилища данных, imdsTrain и imdsTest.
Определите архитектуру сверточной нейронной сети.
layers = [ ... imageInputLayer([28 28 1]) convolution2dLayer(5,20) reluLayer maxPooling2dLayer(2,'Stride',2) fullyConnectedLayer(10) softmaxLayer classificationLayer];
Установите параметры по умолчанию для стохастического градиентного спуска с импульсом. Установите максимальное количество эпох на 20 и начните обучение с начальной скоростью обучения 0,0001.
options = trainingOptions('sgdm', ... 'MaxEpochs',20,... 'InitialLearnRate',1e-4, ... 'Verbose',false, ... 'Plots','training-progress');
Обучение сети.
net = trainNetwork(imdsTrain,layers,options);

Запустите обученную сеть на тестовом аппарате, который не использовался для обучения сети, и спрогнозируйте метки изображения (цифры).
YPred = classify(net,imdsTest); YTest = imdsTest.Labels;
Рассчитайте точность. Точность - это отношение количества истинных меток в тестовых данных, соответствующих классификациям из classify к количеству изображений в тестовых данных.
accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.9420
Обучение сверточной нейронной сети с использованием данных дополненного изображения. Увеличение объема данных помогает предотвратить переоборудование сети и запоминание точных деталей обучающих изображений.
Загрузите образец данных, который состоит из синтетических изображений рукописных цифр.
[XTrain,YTrain] = digitTrain4DArrayData;
digitTrain4DArrayData загружает набор обучающих цифр 4-D виде данных массива. XTrain множество 28 на 28 на 1 на 5000, где:
28 - высота и ширина изображений.
1 - количество каналов.
5000 - количество синтетических изображений рукописных цифр.
YTrain - категориальный вектор, содержащий метки для каждого наблюдения.
Отложите 1000 изображений для проверки сети.
idx = randperm(size(XTrain,4),1000); XValidation = XTrain(:,:,:,idx); XTrain(:,:,:,idx) = []; YValidation = YTrain(idx); YTrain(idx) = [];
Создание imageDataAugmenter объект, определяющий параметры предварительной обработки для увеличения изображения, такие как изменение размера, поворот, перемещение и отражение. Случайное перемещение изображений до трех пикселей по горизонтали и вертикали и поворот изображений на угол до 20 градусов.
imageAugmenter = imageDataAugmenter( ... 'RandRotation',[-20,20], ... 'RandXTranslation',[-3 3], ... 'RandYTranslation',[-3 3])
imageAugmenter =
imageDataAugmenter with properties:
FillValue: 0
RandXReflection: 0
RandYReflection: 0
RandRotation: [-20 20]
RandScale: [1 1]
RandXScale: [1 1]
RandYScale: [1 1]
RandXShear: [0 0]
RandYShear: [0 0]
RandXTranslation: [-3 3]
RandYTranslation: [-3 3]
Создание augmentedImageDatastore объект, используемый для обучения сети, и укажите размер вывода изображения. Во время обучения хранилище данных выполняет увеличение изображения и изменяет его размер. Хранилище данных дополняет изображения, не сохраняя их в памяти. trainNetwork обновляет параметры сети и затем отбрасывает дополненные изображения.
imageSize = [28 28 1];
augimds = augmentedImageDatastore(imageSize,XTrain,YTrain,'DataAugmentation',imageAugmenter);Укажите архитектуру сверточной нейронной сети.
layers = [
imageInputLayer(imageSize)
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];Укажите варианты обучения стохастического градиентного спуска с импульсом.
opts = trainingOptions('sgdm', ... 'MaxEpochs',15, ... 'Shuffle','every-epoch', ... 'Plots','training-progress', ... 'Verbose',false, ... 'ValidationData',{XValidation,YValidation});
Обучение сети. Поскольку изображения проверки не увеличиваются, точность проверки превышает точность обучения.
net = trainNetwork(augimds,layers,opts);

Загрузите образец данных, который состоит из синтетических изображений рукописных цифр. Третий вывод содержит соответствующие углы в градусах, на которые повернуто каждое изображение.
Загрузка обучающих образов в виде массивов 4-D с помощью digitTrain4DArrayData. Продукция XTrain множество 28 на 28 на 1 на 5000, где:
28 - высота и ширина изображений.
1 - количество каналов.
5000 - количество синтетических изображений рукописных цифр.
YTrain содержит углы поворота в градусах.
[XTrain,~,YTrain] = digitTrain4DArrayData;
Отображение 20 случайных обучающих изображений с помощью imshow.
figure numTrainImages = numel(YTrain); idx = randperm(numTrainImages,20); for i = 1:numel(idx) subplot(4,5,i) imshow(XTrain(:,:,:,idx(i))) drawnow; end

Укажите архитектуру сверточной нейронной сети. Для проблем регрессии следует включить уровень регрессии в конце сети.
layers = [ ...
imageInputLayer([28 28 1])
convolution2dLayer(12,25)
reluLayer
fullyConnectedLayer(1)
regressionLayer];Укажите параметры сетевого обучения. Установите начальную скорость обучения на 0,001.
options = trainingOptions('sgdm', ... 'InitialLearnRate',0.001, ... 'Verbose',false, ... 'Plots','training-progress');
Обучение сети.
net = trainNetwork(XTrain,YTrain,layers,options);

Проверка производительности сети путем оценки точности прогнозирования тестовых данных. Использовать predict для прогнозирования углов поворота изображений проверки.
[XTest,~,YTest] = digitTest4DArrayData; YPred = predict(net,XTest);
Оцените производительность модели путем вычисления среднеквадратической ошибки (RMSE) прогнозируемого и фактического углов поворота.
rmse = sqrt(mean((YTest - YPred).^2))
rmse = single
6.0356
Обучение сети LSTM глубокому обучению классификации «последовательность-метка».
Загрузите набор данных японских гласных, как описано в [1] и [2]. XTrain - клеточный массив, содержащий 270 последовательностей различной длины с 12 признаками, соответствующими коэффициентам кепстра LPC. Y - категориальный вектор меток 1,2,..., 9. Записи вXTrain представляют собой матрицы с 12 строками (по одной строке для каждого признака) и различным количеством столбцов (по одному столбцу для каждого временного шага).
[XTrain,YTrain] = japaneseVowelsTrainData;
Визуализация первого временного ряда на графике. Каждая строка соответствует элементу.
figure
plot(XTrain{1}')
title("Training Observation 1")
numFeatures = size(XTrain{1},1);
legend("Feature " + string(1:numFeatures),'Location','northeastoutside')
Определите архитектуру сети LSTM. Укажите размер ввода как 12 (количество элементов входных данных). Укажите уровень LSTM, который должен иметь 100 скрытых единиц и выводить последний элемент последовательности. Наконец, укажите девять классов, включив полностью соединенный слой размера 9, за которым следуют слой softmax и слой классификации.
inputSize = 12; numHiddenUnits = 100; numClasses = 9; layers = [ ... sequenceInputLayer(inputSize) lstmLayer(numHiddenUnits,'OutputMode','last') fullyConnectedLayer(numClasses) softmaxLayer classificationLayer]
layers =
5×1 Layer array with layers:
1 '' Sequence Input Sequence input with 12 dimensions
2 '' LSTM LSTM with 100 hidden units
3 '' Fully Connected 9 fully connected layer
4 '' Softmax softmax
5 '' Classification Output crossentropyex
Укажите параметры обучения. Укажите решатель как 'adam' и 'GradientThreshold' как 1. Установите размер мини-партии равным 27 и максимальное количество периодов равным 70.
Поскольку мини-пакеты малы с короткими последовательностями, ЦП лучше подходит для обучения. Набор 'ExecutionEnvironment' кому 'cpu'. Обучение на GPU, если доступно, установить 'ExecutionEnvironment' кому 'auto' (значение по умолчанию).
maxEpochs = 70; miniBatchSize = 27; options = trainingOptions('adam', ... 'ExecutionEnvironment','cpu', ... 'MaxEpochs',maxEpochs, ... 'MiniBatchSize',miniBatchSize, ... 'GradientThreshold',1, ... 'Verbose',false, ... 'Plots','training-progress');
Обучение сети LSTM с указанными вариантами обучения.
net = trainNetwork(XTrain,YTrain,layers,options);

Загрузите тестовый набор и классифицируйте последовательности в динамики.
[XTest,YTest] = japaneseVowelsTestData;
Классифицируйте данные теста. Укажите размер мини-партии, используемый для обучения.
YPred = classify(net,XTest,'MiniBatchSize',miniBatchSize);Вычислите точность классификации прогнозов.
acc = sum(YPred == YTest)./numel(YTest)
acc = 0.9514
Если имеется набор данных числовых элементов (например, набор числовых данных без пространственных или временных измерений), можно обучить сеть глубокого обучения с помощью уровня ввода элементов.
Считывание данных корпуса коробки передач из CSV-файла "transmissionCasingData.csv".
filename = "transmissionCasingData.csv"; tbl = readtable(filename,'TextType','String');
Преобразовать метки для прогнозирования в категориальные с помощью convertvars функция.
labelName = "GearToothCondition"; tbl = convertvars(tbl,labelName,'categorical');
Чтобы обучить сеть с помощью категориальных элементов, необходимо сначала преобразовать категориальные элементы в числовые. Во-первых, преобразуйте категориальные предикторы в категориальные, используя convertvars путем указания строкового массива, содержащего имена всех категориальных входных переменных. В этом наборе данных имеются две категориальные функции с именами "SensorCondition" и "ShaftCondition".
categoricalInputNames = ["SensorCondition" "ShaftCondition"]; tbl = convertvars(tbl,categoricalInputNames,'categorical');
Закольцовывать категориальные входные переменные. Для каждой переменной:
Преобразование категориальных значений в одноступенчатые кодированные векторы с помощью onehotencode функция.
Добавьте векторы с одним горячим сигналом в таблицу с помощью addvars функция. Укажите, следует ли вставлять векторы после столбца, содержащего соответствующие категориальные данные.
Удалите соответствующий столбец, содержащий категориальные данные.
for i = 1:numel(categoricalInputNames) name = categoricalInputNames(i); oh = onehotencode(tbl(:,name)); tbl = addvars(tbl,oh,'After',name); tbl(:,name) = []; end
Разбейте векторы на отдельные столбцы с помощью splitvars функция.
tbl = splitvars(tbl);
Просмотрите первые несколько строк таблицы. Обратите внимание, что категориальные предикторы были разделены на несколько столбцов с категориальными значениями в качестве имен переменных.
head(tbl)
ans=8×23 table
SigMean SigMedian SigRMS SigVar SigPeak SigPeak2Peak SigSkewness SigKurtosis SigCrestFactor SigMAD SigRangeCumSum SigCorrDimension SigApproxEntropy SigLyapExponent PeakFreq HighFreqPower EnvPower PeakSpecKurtosis No Sensor Drift Sensor Drift No Shaft Wear Shaft Wear GearToothCondition
________ _________ ______ _______ _______ ____________ ___________ ___________ ______________ _______ ______________ ________________ ________________ _______________ ________ _____________ ________ ________________ _______________ ____________ _____________ __________ __________________
-0.94876 -0.9722 1.3726 0.98387 0.81571 3.6314 -0.041525 2.2666 2.0514 0.8081 28562 1.1429 0.031581 79.931 0 6.75e-06 3.23e-07 162.13 0 1 1 0 No Tooth Fault
-0.97537 -0.98958 1.3937 0.99105 0.81571 3.6314 -0.023777 2.2598 2.0203 0.81017 29418 1.1362 0.037835 70.325 0 5.08e-08 9.16e-08 226.12 0 1 1 0 No Tooth Fault
1.0502 1.0267 1.4449 0.98491 2.8157 3.6314 -0.04162 2.2658 1.9487 0.80853 31710 1.1479 0.031565 125.19 0 6.74e-06 2.85e-07 162.13 0 1 0 1 No Tooth Fault
1.0227 1.0045 1.4288 0.99553 2.8157 3.6314 -0.016356 2.2483 1.9707 0.81324 30984 1.1472 0.032088 112.5 0 4.99e-06 2.4e-07 162.13 0 1 0 1 No Tooth Fault
1.0123 1.0024 1.4202 0.99233 2.8157 3.6314 -0.014701 2.2542 1.9826 0.81156 30661 1.1469 0.03287 108.86 0 3.62e-06 2.28e-07 230.39 0 1 0 1 No Tooth Fault
1.0275 1.0102 1.4338 1.0001 2.8157 3.6314 -0.02659 2.2439 1.9638 0.81589 31102 1.0985 0.033427 64.576 0 2.55e-06 1.65e-07 230.39 0 1 0 1 No Tooth Fault
1.0464 1.0275 1.4477 1.0011 2.8157 3.6314 -0.042849 2.2455 1.9449 0.81595 31665 1.1417 0.034159 98.838 0 1.73e-06 1.55e-07 230.39 0 1 0 1 No Tooth Fault
1.0459 1.0257 1.4402 0.98047 2.8157 3.6314 -0.035405 2.2757 1.955 0.80583 31554 1.1345 0.0353 44.223 0 1.11e-06 1.39e-07 230.39 0 1 0 1 No Tooth Fault
Просмотр имен классов набора данных.
classNames = categories(tbl{:,labelName})classNames = 2×1 cell
{'No Tooth Fault'}
{'Tooth Fault' }
Затем разбейте набор данных на разделы обучения и тестирования. Отложите 15% данных для тестирования.
Определите количество наблюдений для каждого раздела.
numObservations = size(tbl,1); numObservationsTrain = floor(0.85*numObservations); numObservationsTest = numObservations - numObservationsTrain;
Создайте массив случайных индексов, соответствующих наблюдениям, и разделите его с использованием размеров разделов.
idx = randperm(numObservations); idxTrain = idx(1:numObservationsTrain); idxTest = idx(numObservationsTrain+1:end);
Разбиение таблицы данных на разделы обучения, проверки и тестирования с использованием индексов.
tblTrain = tbl(idxTrain,:); tblTest = tbl(idxTest,:);
Определите сеть с уровнем ввода элемента и укажите количество элементов. Также настройте входной уровень для нормализации данных с помощью Z-score нормализации.
numFeatures = size(tbl,2) - 1;
numClasses = numel(classNames);
layers = [
featureInputLayer(numFeatures,'Normalization', 'zscore')
fullyConnectedLayer(50)
batchNormalizationLayer
reluLayer
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer];Укажите параметры обучения.
miniBatchSize = 16; options = trainingOptions('adam', ... 'MiniBatchSize',miniBatchSize, ... 'Shuffle','every-epoch', ... 'Plots','training-progress', ... 'Verbose',false);
Обучение сети с использованием архитектуры, определенной layers, данные обучения и варианты обучения.
net = trainNetwork(tblTrain,layers,options);

Спрогнозировать метки тестовых данных с использованием обученной сети и рассчитать точность. Точность - это доля меток, которую сеть предсказывает правильно.
YPred = classify(net,tblTest,'MiniBatchSize',miniBatchSize);
YTest = tblTest{:,labelName};
accuracy = sum(YPred == YTest)/numel(YTest)accuracy = 0.9688
images - Данные изображенияДанные изображения, указанные как одно из следующих:
| Тип данных | Описание | Пример использования | |
|---|---|---|---|
| Хранилище данных | ImageDatastore | Хранилище данных, содержащее изображения и метки. | Нейронная сеть классификации изображений с изображениями, сохраненными на диске, где изображения имеют одинаковый размер. Если изображения имеют разные размеры, используйте
|
AugmentedImageDatastore | Хранилище данных, в котором применяются случайные аффинные геометрические преобразования, включая изменение размеров, поворот, отражение, сдвиг и перемещение. |
| |
TransformedDatastore | Хранилище данных, преобразующее пакеты данных, считанные из базового хранилища данных, с помощью пользовательской функции преобразования. |
| |
CombinedDatastore | Хранилище данных, считывающее данные из двух или более базовых хранилищ данных. |
| |
PixelLabelImageDatastore(Панель инструментов компьютерного зрения) | Хранилище данных, применяющее идентичные аффинные геометрические преобразования к изображениям и соответствующим меткам пикселей. | Обучить нейронную сеть семантической сегментации. | |
RandomPatchExtractionDatastore(Панель инструментов обработки изображений) | Хранилище данных, которое извлекает пары случайных фрагментов из изображений или изображений меток пикселей и при необходимости применяет к парам идентичные случайные аффинные геометрические преобразования. | Обучение нейронной сети обнаружению объектов. | |
DenoisingImageDatastore(Панель инструментов обработки изображений) | Хранилище данных, применяющее произвольно сгенерированный гауссов шум. | Обучение нейронной сети деноизированию изображений. | |
| Пользовательское хранилище данных мини-пакета | Пользовательское хранилище данных, возвращающее мини-пакеты данных. | Обучение нейронной сети с использованием данных в формате, который не поддерживается другими хранилищами данных. Дополнительные сведения см. в разделе Разработка собственного мини-хранилища пакетных данных. | |
| Числовой массив | Изображения, указанные как числовой массив. Если изображения указаны как числовой массив, необходимо также указать responses аргумент. | Обучить нейронную сеть, используя данные, которые вписываются в память и не требуют дополнительной обработки наподобие увеличения. | |
| Стол | Изображения, указанные как таблица. Если изображения указаны как таблица, то можно также указать, какие столбцы содержат ответы, используя responses аргумент. | Обучение нейронной сети с использованием данных, хранящихся в таблице. | |
Для сетей с несколькими входами хранилище данных должно быть TransformedDatastore или CombinedDatastore объект.
Совет
Для последовательностей изображений, например, видеоданных, используйте sequences входной аргумент.
Хранилища данных считывают мини-пакеты изображений и откликов. Хранилища данных лучше всего подходят при наличии данных, которые не помещаются в память, или при необходимости применения дополнений или преобразований к данным.
В списке ниже перечислены хранилища данных, непосредственно совместимые с trainNetwork для данных изображения.
PixelLabelImageDatastore(Панель инструментов компьютерного зрения)
RandomPatchExtractionDatastore(Панель инструментов обработки изображений)
DenoisingImageDatastore(Панель инструментов обработки изображений)
Например, можно создать хранилище данных изображения с помощью imageDatastore и использовать имена папок, содержащих изображения, в качестве меток путем установки 'LabelSource' опция для 'foldernames'. Можно также указать метки вручную с помощью Labels свойства хранилища данных образа.
Обратите внимание, что ImageDatastore объекты позволяют выполнять пакетное чтение файлов изображений JPG или PNG с помощью предварительной выборки. Если для чтения изображений используется пользовательская функция, то ImageDatastore объекты не выполняют предварительную выборку.
Совет
Использовать augmentedImageDatastore для эффективной предварительной обработки изображений для глубокого обучения, включая изменение размеров изображений.
Не используйте readFcn вариант imageDatastore для предварительной обработки или изменения размера, поскольку этот параметр обычно значительно медленнее.
Можно использовать другие встроенные хранилища данных для обучения сетям глубокого обучения с помощью transform и combine функции. Эти функции могут преобразовывать данные, считанные из хранилищ данных, в формат, требуемый trainNetwork.
Для сетей с несколькими входами хранилище данных должно быть TransformedDatastore или CombinedDatastore объект.
Требуемый формат выходных данных хранилища данных зависит от архитектуры сети.
| Сетевая архитектура | Выходные данные хранилища данных | Пример вывода |
|---|---|---|
| Один входной слой | Таблица или массив ячеек с двумя столбцами. Первый и второй столбцы определяют предикторы и ответы соответственно. Элементы таблицы должны быть скалярами, векторами строк или массивами ячеек 1 на 1, содержащими числовой массив. Пользовательские хранилища данных мини-пакетов должны выводить таблицы. | Таблица для сети с одним входом и одним выходом: data = read(ds) data =
4×2 table
Predictors Response
__________________ ________
{224×224×3 double} 2
{224×224×3 double} 7
{224×224×3 double} 9
{224×224×3 double} 9
|
Массив ячеек для сети с одним входом и одним выходом: data = read(ds) data =
4×2 cell array
{224×224×3 double} {[2]}
{224×224×3 double} {[7]}
{224×224×3 double} {[9]}
{224×224×3 double} {[9]} | ||
| Несколько входных слоев | Массив ячеек с ( Первое Порядок входных данных задается | Массив ячеек для сети с двумя входами и одним выходом. data = read(ds) data =
4×3 cell array
{224×224×3 double} {128×128×3 double} {[2]}
{224×224×3 double} {128×128×3 double} {[2]}
{224×224×3 double} {128×128×3 double} {[9]}
{224×224×3 double} {128×128×3 double} {[9]} |
Формат предикторов зависит от типа данных.
| Данные | Формат |
|---|---|
| 2-D изображения | h-by-w-by-c числовой массив, где h, w и c - высота, ширина и количество каналов изображений соответственно. |
| 3-D изображения | h-by-w-by-d-by-c числовой массив, где h, w, d и c - высота, ширина, глубина и количество каналов изображений соответственно. |
Для предикторов, возвращаемых в таблицах, элементы должны содержать числовой скаляр, числовой вектор строки или массив ячеек 1 на 1, содержащий числовой массив.
Формат ответов зависит от типа задачи.
| Задача | Формат ответа |
|---|---|
| Классификация изображений | Категориальный скаляр |
| Регрессия изображения |
|
Для ответов, возвращаемых в таблицах, элементы должны быть категориальным скаляром, числовым скаляром, числовым вектором строки или массивом ячеек 1 на 1, содержащим числовой массив.
Дополнительные сведения см. в разделе Хранилища данных для глубокого обучения.
Для данных, которые помещаются в память и не требуют дополнительной обработки, такой как увеличение, можно указать набор данных изображений в виде числового массива. Если изображения указаны как числовой массив, необходимо также указать responses аргумент.
Размер и форма числового массива зависит от типа данных изображения.
| Данные | Формат |
|---|---|
| 2-D изображения | h-by-w-by-c-by-N числовой массив, где h, w и c - высота, ширина и количество каналов изображений соответственно, а N - количество изображений. |
| 3-D изображения | h-by-w-d-by-c-by-N числовой массив, где h, w, d и c - высота, ширина, глубина и количество каналов изображений соответственно, а N - количество изображений. |
В качестве альтернативы хранилищам данных или числовым массивам можно также указать изображения и ответы в таблице. Если изображения указаны как таблица, то можно также указать, какие столбцы содержат ответы, используя responses аргумент.
При указании изображений и ответов в таблице каждая строка таблицы соответствует наблюдению.
Для ввода изображения предикторы должны находиться в первом столбце таблицы, указанном следующим образом:
Абсолютный или относительный путь к изображению, заданный как символьный вектор
Массив ячеек 1 на 1, содержащий числовой массив h на w на c, представляющий 2-D изображение, где h, w и c соответствуют высоте, ширине и количеству каналов изображения соответственно.
Формат ответов зависит от типа задачи.
| Задача | Формат ответа |
|---|---|
| Классификация изображений | Категориальный скаляр |
| Регрессия изображения |
|
Для нейронных сетей с вводом изображения, если не указать responses, то функция по умолчанию использует первый столбец tbl для предикторов и последующих столбцов в качестве ответов.
Совет
Если предикторы или ответы содержат NaNs, затем они распространяются по сети во время обучения. В этих случаях тренировка обычно не сходится.
Совет
Для регрессионных задач нормализация ответов часто помогает стабилизировать и ускорить обучение нейронных сетей регрессии. Дополнительные сведения см. в разделе Конволюционная нейронная сеть поезда для регрессии.
sequences - Данные последовательности или временных рядовДанные последовательности или временного ряда, указанные как одно из следующих значений:
| Тип данных | Описание | Пример использования | |
|---|---|---|---|
| Хранилище данных | TransformedDatastore | Хранилище данных, преобразующее пакеты данных, считанные из базового хранилища данных, с помощью пользовательской функции преобразования. |
|
CombinedDatastore | Хранилище данных, считывающее данные из двух или более базовых хранилищ данных. | Объединение предикторов и ответов из различных источников данных. | |
| Пользовательское хранилище данных мини-пакета | Пользовательское хранилище данных, возвращающее мини-пакеты данных. | Обучение нейронной сети с использованием данных в формате, который не поддерживается другими хранилищами данных. Дополнительные сведения см. в разделе Разработка собственного мини-хранилища пакетных данных. | |
| Числовой массив или массив ячеек | Одна последовательность, указанная как числовой массив или набор данных последовательностей, указанных как массив ячеек числовых массивов. Если последовательности указаны как числовой массив или массив ячеек, необходимо также указать responses аргумент. | Обучение нейронной сети с использованием данных, которые вписываются в память и не требуют дополнительной обработки, как пользовательские преобразования. | |
Хранилища данных считывают мини-пакеты последовательностей и откликов. Хранилища данных лучше всего подходят при наличии данных, которые не помещаются в память, или при необходимости применения преобразований к данным.
В списке ниже перечислены хранилища данных, непосредственно совместимые с trainNetwork для данных последовательности.
Можно использовать другие встроенные хранилища данных для обучения сетям глубокого обучения с помощью transform и combine функции. Эти функции могут преобразовывать данные, считанные из хранилищ данных, в формат таблицы или массива ячеек, требуемый trainNetwork. Например, можно преобразовать и объединить данные, считанные из массивов в памяти и CSV-файлов, используя ArrayDatastore и TabularTextDatastore соответственно.
Хранилище данных должно возвращать данные в таблице или массиве ячеек. Пользовательские хранилища данных мини-пакетов должны выводить таблицы.
| Выходные данные хранилища данных | Пример вывода |
|---|---|
| Стол |
data = read(ds) data =
4×2 table
Predictors Response
__________________ ________
{12×50 double} 2
{12×50 double} 7
{12×50 double} 9
{12×50 double} 9
|
| Массив ячеек |
data = read(ds) data =
4×2 cell array
{12×50 double} {[2]}
{12×50 double} {[7]}
{12×50 double} {[9]}
{12×50 double} {[9]} |
Формат предикторов зависит от типа данных.
| Данные | Формат предикторов |
|---|---|
| Векторная последовательность | матрица c-by-s, где c - число признаков последовательности, а s - длина последовательности. |
| 2-D последовательность изображений | h-by-w-by-c-by-s массив, где h, w и c соответствуют высоте, ширине и количеству каналов изображения соответственно, а s - длина последовательности. Каждая последовательность в мини-партии должна иметь одинаковую длину. |
| 3-D последовательность изображений | h-by-w-d-by-c-by-s массив, где h, w, d и c соответствуют высоте, ширине, глубине и количеству каналов изображения, соответственно, и s - длина последовательности. Каждая последовательность в мини-партии должна иметь одинаковую длину. |
Для предикторов, возвращаемых в таблицах, элементы должны содержать числовой скаляр, числовой вектор строки или массив ячеек 1 на 1, содержащий числовой массив.
Формат ответов зависит от типа задачи.
| Задача | Формат ответов |
|---|---|
| Классификация «последовательность-метка» | Категориальный скаляр |
| Регрессия «последовательность к одному» | Скаляр |
| Регрессия между последовательностями и векторами | Числовой вектор строки |
| Классификация последовательности к последовательности | Последовательность 1 на s категориальных меток, где s - длина последовательности соответствующей последовательности предиктора. |
| Регрессия последовательности к последовательности | Матрица R-by-s, где R - количество откликов, а s - длина последовательности соответствующей последовательности предиктора. |
Для ответов, возвращаемых в таблицах, элементы должны быть категориальным скаляром, числовым скаляром, числовым вектором строки или массивом ячеек 1 на 1, содержащим числовой массив.
Дополнительные сведения см. в разделе Хранилища данных для глубокого обучения.
Для данных, которые помещаются в память и не требуют дополнительной обработки, как пользовательские преобразования, можно указать одну последовательность как числовой массив или набор данных последовательностей как массив ячеек числовых массивов. Если последовательности указаны как ячейка или числовой массив, необходимо также указать responses аргумент.
Для ввода массива ячеек массив ячеек должен быть массивом N-by-1 ячеек числовых массивов, где N - количество наблюдений. Размер и форма числового массива, представляющего последовательность, зависит от типа данных последовательности:
| Вход | Описание |
|---|---|
| Векторные последовательности | матрицы c-by-s, где c - число признаков последовательностей, а s - длина последовательности. |
| 2-D последовательности изображений | массивы h-by-w-by-s, где h, w и c соответствуют высоте, ширине и количеству каналов изображений, соответственно, и s - длина последовательности. |
| 3-D последовательности изображений | h-by-w-d-by-c-by-s, где h, w, d и c соответствуют высоте, ширине, глубине и количеству каналов 3-D изображений, соответственно, и s - длина последовательности. |
Совет
Если предикторы или ответы содержат NaNs, затем они распространяются по сети во время обучения. В этих случаях тренировка обычно не сходится.
Совет
Для регрессионных задач нормализация ответов часто помогает стабилизировать и ускорить обучение. Дополнительные сведения см. в разделе Конволюционная нейронная сеть поезда для регрессии.
features - Данные о характеристикахДанные элемента, указанные как одно из следующих значений:
| Тип данных | Описание | Пример использования | |
|---|---|---|---|
| Хранилище данных | TransformedDatastore | Хранилище данных, преобразующее пакеты данных, считанные из базового хранилища данных, с помощью пользовательской функции преобразования. |
|
CombinedDatastore | Хранилище данных, считывающее данные из двух или более базовых хранилищ данных. |
| |
| Пользовательское хранилище данных мини-пакета | Пользовательское хранилище данных, возвращающее мини-пакеты данных. | Обучение нейронной сети с использованием данных в формате, который не поддерживается другими хранилищами данных. Дополнительные сведения см. в разделе Разработка собственного мини-хранилища пакетных данных. | |
| Стол | Данные элемента указаны как таблица. Если элементы указаны как таблица, то можно также указать, какие столбцы содержат ответы, используя responses аргумент. | Обучение нейронной сети с использованием данных, хранящихся в таблице. | |
| Числовой массив | Данные элемента указаны как числовой массив. Если элементы указаны как числовой массив, необходимо также указать responses аргумент. | Обучение нейронной сети с использованием данных, которые вписываются в память и не требуют дополнительной обработки, как пользовательские преобразования. | |
Хранилища данных считывают мини-пакеты данных и откликов функций. Хранилища данных лучше всего подходят при наличии данных, которые не помещаются в память, или при необходимости применения преобразований к данным.
В списке ниже перечислены хранилища данных, непосредственно совместимые с trainNetwork для данных элемента.
Пользовательское хранилище данных мини-пакета
Можно использовать другие встроенные хранилища данных для обучения сетям глубокого обучения с помощью transform и combine функции. Эти функции могут преобразовывать данные, считанные из хранилищ данных, в формат таблицы или массива ячеек, требуемый trainNetwork. Дополнительные сведения см. в разделе Хранилища данных для глубокого обучения.
Для сетей с несколькими входами хранилище данных должно быть TransformedDatastore или CombinedDatastore объект.
Хранилище данных должно возвращать данные в таблице или массиве ячеек. Пользовательские хранилища данных мини-пакетов должны выводить таблицы. Формат выходных данных хранилища данных зависит от архитектуры сети.
| Сетевая архитектура | Выходные данные хранилища данных | Пример вывода |
|---|---|---|
| Один входной слой | Таблица или массив ячеек с двумя столбцами. Первый и второй столбцы определяют предикторы и ответы соответственно. Элементы таблицы должны быть скалярами, векторами строк или массивами ячеек 1 на 1, содержащими числовой массив. Пользовательские хранилища данных мини-пакетов должны выводить таблицы. | Таблица для сети с одним входом и одним выходом: data = read(ds) data =
4×2 table
Predictors Response
__________________ ________
{24×1 double} 2
{24×1 double} 7
{24×1 double} 9
{24×1 double} 9
|
Массив ячеек для сети с одним входом и одним выходом:
data = read(ds) data =
4×2 cell array
{24×1 double} {[2]}
{24×1 double} {[7]}
{24×1 double} {[9]}
{24×1 double} {[9]} | ||
| Несколько входных слоев | Массив ячеек с ( Первое Порядок входных данных задается | Массив ячеек для сети с двумя входами и одним выходом: data = read(ds) data =
4×3 cell array
{24×1 double} {28×1 double} {[2]}
{24×1 double} {28×1 double} {[2]}
{24×1 double} {28×1 double} {[9]}
{24×1 double} {28×1 double} {[9]} |
Предикторы должны быть векторами столбцов c-by-1, где c - количество признаков.
Формат ответов зависит от типа задачи.
| Задача | Формат ответов |
|---|---|
| Классификация | Категориальный скаляр |
| Регресс |
|
Дополнительные сведения см. в разделе Хранилища данных для глубокого обучения.
Для данных элементов, которые помещаются в память и не требуют дополнительной обработки, такой как пользовательские преобразования, можно указать данные элементов и ответы в виде таблицы.
Каждая строка в таблице соответствует наблюдению. Расположение предикторов и ответов в столбцах таблицы зависит от типа задачи.
| Задача | Предсказатели | Ответы |
|---|---|---|
| Классификация элементов | Элементы, указанные в одном или нескольких столбцах как скаляры. Если не указать | Категориальная метка |
| Регрессия элемента | Один или несколько столбцов скалярных значений |
Для классификационных сетей с вводом элементов, если не указан responses аргумент, то функция по умолчанию использует первый (numColumns - 1) столбцов tbl для предикторов и последний столбец для меток, где numFeatures - количество элементов во входных данных.
Для регрессионных сетей с вводом элемента, если не указан responseNames аргумент, то функция по умолчанию использует первый numFeatures столбцы для предикторов и последующие столбцы для ответов, где numFeatures - количество элементов во входных данных.
Для данных элементов, которые помещаются в память и не требуют дополнительной обработки, такой как пользовательские преобразования, можно указать данные элементов в виде числового массива. Если данные элемента указаны как числовой массив, необходимо также указать responses аргумент.
Числовой массив должен быть N-by-numFeatures числовой массив, где N - количество наблюдений и numFeatures - количество признаков входных данных.
Совет
Нормализация ответов часто помогает стабилизировать и ускорить обучение нейронных сетей регрессии. Дополнительные сведения см. в разделе Конволюционная нейронная сеть поезда для регрессии.
Совет
Ответы не должны содержать NaNs. Если данные предиктора содержат NaNs, затем они размножаются через тренировку. Однако в большинстве случаев обучение не сходится.
responses - ОтветыОтветы.
Если входные данные являются числовым массивом массива ячеек, укажите ответы следующим образом.
категориальный вектор меток
числовой массив числовых ответов
категориальные или числовые последовательности массива ячеек
Если входные данные являются таблицей, можно дополнительно указать, какие столбцы таблицы содержат ответы:
символьный вектор
массив ячеек символьных векторов
строковый массив
Если входные данные являются числовым массивом или массивом ячеек, то формат ответов зависит от типа задачи.
| Задача | Формат | |
|---|---|---|
| Классификация | Классификация изображений | N-by-1 категориальный вектор меток, где N - число наблюдений. |
| Классификация элементов | ||
| Классификация «последовательность-метка» | ||
| Классификация последовательности к последовательности | N-by-1 клеточный массив категориальных последовательностей меток, где N - количество наблюдений. Каждая последовательность должна иметь то же количество временных шагов, что и соответствующая предикторная последовательность. Для задач классификации последовательности к последовательности с одним наблюдением, | |
| Регресс | 2-D регрессия изображения |
|
| 3-D регрессия изображения |
| |
| Регрессия элемента | Матрица N-по-R, где N - количество наблюдений, а R - количество откликов. | |
| Регрессия «последовательность к одному» | Матрица N-по-R, где N - число последовательностей, а R - число откликов. | |
| Регрессия последовательности к последовательности | N-by-1 массив ячеек числовых последовательностей, где N - количество последовательностей. Последовательности представляют собой матрицы с R строками, где R - количество откликов. Каждая последовательность должна иметь то же количество временных шагов, что и соответствующая предикторная последовательность. Для задач регрессии последовательности к последовательности с одним наблюдением, | |
Совет
Нормализация ответов часто помогает стабилизировать и ускорить обучение нейронных сетей регрессии. Дополнительные сведения см. в разделе Конволюционная нейронная сеть поезда для регрессии.
Совет
Ответы не должны содержать NaNs. Если данные предиктора содержат NaNs, затем они размножаются через тренировку. Однако в большинстве случаев обучение не сходится.
layers - Сетевые уровниLayer массив | LayerGraph объектСетевые уровни, указанные как Layer массив или LayerGraph объект.
Для создания сети с последовательным подключением всех слоев можно использовать Layer массив в качестве входного аргумента. В этом случае возвращенной сетью является SeriesNetwork объект.
Сеть направленных ациклических графов (DAG) имеет сложную структуру, в которой слои могут иметь множество входов и выходов. Чтобы создать сеть DAG, укажите сетевую архитектуру как LayerGraph объект, а затем использовать этот график слоев в качестве входного аргумента для trainNetwork.
Список встроенных слоев см. в разделе Список слоев глубокого обучения.
options - Варианты обученияTrainingOptionsSGDM | TrainingOptionsRMSProp | TrainingOptionsADAMВарианты обучения, указанные как TrainingOptionsSGDM, TrainingOptionsRMSProp, или TrainingOptionsADAM объект, возвращенный trainingOptions функция.
net - Обученная сетьSeriesNetwork объект | DAGNetwork объектОбученная сеть, возвращенная как SeriesNetwork объект или DAGNetwork объект.
При обучении сети с помощью Layer массив, затем net является SeriesNetwork объект. При обучении сети с помощью LayerGraph объект, затем net является DAGNetwork объект.
info - Информация об обученииОбучающая информация, возвращаемая в виде структуры, где каждое поле является скалярным или числовым вектором с одним элементом на учебную итерацию.
Для задач классификации, info содержит следующие поля:
TrainingLoss - Значения функций потерь
TrainingAccuracy - Точность обучения
ValidationLoss - Значения функций потерь
ValidationAccuracy - Точность проверки
BaseLearnRate - Показатели обучения
FinalValidationLoss - Потеря окончательной проверки
FinalValidationAccuracy - Окончательная точность проверки
Для задач регрессии: info содержит следующие поля:
TrainingLoss - Значения функций потерь
TrainingRMSE - Учебные значения RMSE
ValidationLoss - Значения функций потерь
ValidationRMSE - Значения RMSE проверки
BaseLearnRate - Показатели обучения
FinalValidationLoss - Потеря окончательной проверки
FinalValidationRMSE - Окончательная проверка RMSE
Структура содержит только поля ValidationLoss, ValidationAccuracy, ValidationRMSE , FinalValidationLoss , FinalValidationAccuracy и FinalValidationRMSE когда options указывает данные проверки. 'ValidationFrequency' вариант trainingOptions определяет, какие итерации программа вычисляет метрики проверки. Окончательные метрики проверки являются скалярными. Другими полями структуры являются векторы строк, где каждый элемент соответствует обучающей итерации. Для итераций, когда программное обеспечение не рассчитывает метрики проверки, соответствующие значения в структуре: NaN.
Если сеть содержит уровни пакетной нормализации, то окончательные метрики проверки часто отличаются от метрик проверки, оцененных во время обучения. Это связано с тем, что уровни пакетной нормализации в конечной сети выполняют другие операции, чем во время обучения. Дополнительные сведения см. в разделе batchNormalizationLayer.
Deep Learning Toolbox™ позволяет сохранять сети в виде файлов .mat после каждого периода обучения. Эта периодическая экономия особенно полезна при наличии большой сети или большого набора данных, а обучение занимает много времени. Если обучение по какой-то причине прервано, можно возобновить обучение из последней сохраненной сети контрольных точек. Если хотите trainNetwork для сохранения сетей контрольных точек необходимо указать имя пути с помощью 'CheckpointPath' аргумент пары имя-значение trainingOptions. Если указанный путь не существует, то trainingOptions возвращает ошибку.
trainNetwork автоматически назначает уникальные имена сетевым файлам контрольных точек. В имени примера: net_checkpoint__351__2018_04_12__18_09_52.mat, 351 - номер итерации, 2018_04_12 - дата, и 18_09_52 - время, в которое trainNetwork сохраняет сеть. Сетевой файл контрольной точки можно загрузить двойным щелчком мыши или с помощью команды load в командной строке. Например:
load net_checkpoint__351__2018_04_12__18_09_52.mat
trainNetwork. Например:trainNetwork(XTrain,YTrain,net.Layers,options)
При обучении сети с помощью trainNetwork функция или при использовании функций прогнозирования или проверки с DAGNetwork и SeriesNetwork объекты, программное обеспечение выполняет эти вычисления, используя арифметику с одной точностью и плавающей запятой. Функции обучения, прогнозирования и проверки включают trainNetwork, predict, classify, и activations. Программа использует арифметику с одинарной точностью при обучении сетей с использованием процессоров и графических процессоров.
Предупреждает, начиная с R2021a
При указании данных последовательности для trainNetwork , поддержка указания таблиц путей к файлам MAT будет удалена в будущем выпуске.
Чтобы обучить сети последовательностям, которые не помещаются в память, используйте хранилище данных. Можно использовать любое хранилище данных для чтения данных, а затем использовать transform для преобразования выходных данных хранилища данных в формат trainNetwork требуется функция. Например, можно считывать данные с помощью FileDatastore или TabularTextDatastore затем преобразуйте выходные данные с помощью transform функция.
[1] Кудо, М., Дж. Тояма и М. Симбо. «Многомерная классификация кривых с использованием сквозных областей». Буквы распознавания образов. т. 20, № 11-13, стр. 1103-1111.
[2] Кудо, М., Дж. Тояма и М. Симбо. Набор данных гласных на японском языке. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels
Для параллельного выполнения вычислений установите 'ExecutionEnvironment' опция для 'multi-gpu' или 'parallel'.
Использовать trainingOptions для установки 'ExecutionEnvironment' и поставлять options кому trainNetwork. Если не установлен 'ExecutionEnvironment', то trainNetwork выполняется на графическом процессоре, если он доступен.
Дополнительные сведения см. в разделе Масштабирование глубокого обучения параллельно и в облаке.
Для предотвращения ошибок, связанных с нехваткой памяти, рекомендуется не перемещать большие наборы обучающих данных в графический процессор. Вместо этого обучайте сеть графическому процессору с помощью trainingOptions для установки 'ExecutionEnvironment' кому "auto" или "gpu" и поставлять options кому trainNetwork.
Когда входные данные являются gpuArray, массив ячеек или таблица, содержащая gpuArray данные или хранилище данных, которое возвращает gpuArray данные, "ExecutionEnvironment" параметр должен быть "auto" или "gpu".
Дополнительные сведения см. в разделе Запуск функций MATLAB на графическом процессоре (панель инструментов параллельных вычислений).
analyzeNetwork | assembleNetwork | classify | DAGNetwork | Конструктор глубоких сетей | LayerGraph | predict | SeriesNetwork | trainingOptions
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.