Обучите глубокую нейронную сеть
Для задач классификации и регрессии можно обучить различные типы нейронных сетей с помощью trainNetwork
функция.
Для примера можно обучить:
сверточная нейронная сеть (ConvNet, CNN) для данных изображений
рекуррентная нейронная сеть (RNN), такая как длительная краткосрочная память (LSTM) или стробированная сеть рекуррентного модуля (GRU) для данных последовательности и timeseries
многослойная сеть перцептрона (MLP) для числовых данных о функциях
Можно обучаться либо на центральном процессоре, либо на графическом процессоре. Для классификации изображений и регрессии изображений можно обучить одну сеть параллельно с помощью нескольких графических процессоров или локального или удаленного параллельного пула. Для обучения на графическом процессоре или параллельно требуется Parallel Computing Toolbox™. Для использования графический процессор для глубокого обучения необходимо иметь также поддерживаемое графический процессор. Для получения информации о поддерживаемых устройствах смотрите Поддержку GPU by Release (Parallel Computing Toolbox). Чтобы задать опции обучения, включая опции окружения выполнения, используйте trainingOptions
функция.
При обучении нейронной сети можно задать предикторы и отклики как один вход или в двух отдельных входах.
Загрузите данные как ImageDatastore
объект.
digitDatasetPath = fullfile(matlabroot,'toolbox','nnet', ... 'nndemos','nndatasets','DigitDataset'); imds = imageDatastore(digitDatasetPath, ... 'IncludeSubfolders',true, ... 'LabelSource','foldernames');
datastore содержит 10 000 синтетических изображений цифр от 0 до 9. Изображения генерируются путем применения случайных преобразований к цифровым изображениям, созданным различными шрифтами. Каждое цифровое изображение составляет 28 на 28 пикселей. datastore содержит равное количество изображений в категории.
Отобразите некоторые изображения в datastore.
figure numImages = 10000; perm = randperm(numImages,20); for i = 1:20 subplot(4,5,i); imshow(imds.Files{perm(i)}); drawnow; end
Разделите datastore так, чтобы каждая категория в набор обучающих данных имела 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
объект, используемый для сетевого обучения и задающий размер выхода изображения. Во время обучения datastore выполняет увеличение изображения и изменяет размер изображений. Datastore увеличивает изображения, не сохраняя никаких изображений в памяти. 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 функциями, соответствующими коэффициентам cepstrum 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'
. Для обучения на графическом процессоре, при наличии, установите '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-балла.
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
- Данные изображенийДанные изображения, заданные как одно из следующего:
Тип данных | Описание | Использование примера | |
---|---|---|---|
Datastore | ImageDatastore | Datastore, который содержит изображения и метки. | Обучите нейронную сеть классификации изображений с изображениями, сохраненными на диске, где изображения имеют одинаковый размер. Когда изображения имеют разные размеры, используйте
|
AugmentedImageDatastore | Datastore, который применяет случайные аффинные геометрические преобразования, включая изменение размера, вращение, отражение, сдвиг и перемещение. |
| |
TransformedDatastore | Datastore, который преобразует пакеты данных, считанных из базового datastore, с помощью пользовательской функции преобразования. |
| |
CombinedDatastore | Datastore, который читается из двух или нескольких базовых хранилищ данных. |
| |
PixelLabelImageDatastore (Computer Vision Toolbox) | Datastore, который применяет идентичные аффинные геометрические преобразования к изображениям и соответствующим меткам пикселей. | Обучите нейронную сеть для семантической сегментации. | |
RandomPatchExtractionDatastore (Набор Image Processing Toolbox) | Datastore, который извлекает пары случайных закрашенных фигур из изображений или пиксельных изображений с меткой и опционально применяет идентичные случайные аффинные геометрические преобразования к парам. | Обучите нейронную сеть для обнаружения объектов. | |
DenoisingImageDatastore (Набор Image Processing Toolbox) | Datastore, который применяет случайным образом сгенерированный Гауссов шум. | Обучите нейронную сеть для шумоподавления изображений. | |
Пользовательский мини-пакет datastore | Пользовательский datastore, который возвращает мини-пакеты данных. | Обучите нейронную сеть с помощью данных в формате, который не поддерживают другие хранилища данных. Для получения дополнительной информации смотрите Разработку Пользовательского Мини-Пакета Datastore. | |
Числовой массив | Изображения, заданные как числовой массив. Если вы задаете изображения как числовой массив, то вы также должны задать responses аргумент. | Обучите нейронную сеть с помощью данных, которые помещаются в памяти и не требуют дополнительной обработки, как увеличение. | |
Таблица | Изображения, заданные как таблица. Если вы задаете изображения как таблицу, то можно также задать, какие столбцы содержат ответы, используя responses аргумент. | Обучите нейронную сеть с помощью данных, хранящихся в таблице. |
Для сетей с несколькими входами datastore должен быть TransformedDatastore
или CombinedDatastore
объект.
Совет
Для последовательностей изображений, для примера видео данных, используйте sequences
входной параметр.
Datastores читают мини-пакеты изображений и откликов. Datastores лучше всего подходит, когда у вас есть данные, которые не помещаются в памяти, или когда вы хотите применить увеличения или преобразования к данным.
В приведенном ниже списке перечислены хранилища данных, которые непосредственно совместимы с trainNetwork
для данных изображений.
PixelLabelImageDatastore
(Computer Vision Toolbox)
RandomPatchExtractionDatastore
(Набор Image Processing Toolbox)
DenoisingImageDatastore
(Набор Image Processing Toolbox)
Для примера можно создать datastore изображения с помощью imageDatastore
и используйте имена папок, содержащих изображения, в качестве меток путем установки 'LabelSource'
опция для 'foldernames'
. Также можно задать метки вручную с помощью Labels
свойство image datastore.
Обратите внимание, что ImageDatastore
объекты допускают пакетное чтение файлов изображений JPG или PNG с помощью предварительной выборки. Если вы используете пользовательскую функцию для чтения изображений, то ImageDatastore
объекты не выполняют предварительную выборку.
Совет
Использовать augmentedImageDatastore
для эффективной предварительной обработки изображений для глубокого обучения, включая изменение размера изображений.
Не используйте readFcn
опция imageDatastore
для предварительной обработки или изменения размера, поскольку эта опция обычно значительно медленнее.
Можно использовать другие встроенные хранилища данных для обучения нейронных сетей для глубокого обучения при помощи transform
и combine
функций. Эти функции могут преобразовать данные, считанные из хранилищ данных, в формат, требуемый trainNetwork
.
Для сетей с несколькими входами datastore должен быть TransformedDatastore
или CombinedDatastore
объект.
Необходимый формат выхода datastore зависит от сетевой архитектуры.
Сетевая архитектура | Выход Datastore | Пример выхода |
---|---|---|
Один входной слой | Таблица или массив ячеек с двумя столбцами. Первый и второй столбцы задают предикторы и отклики, соответственно. Элементы таблицы должны быть скалярами, векторами-строками или массивами ячеек 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 w d c числовым массивом, где h, w, d, и c высота, ширина, глубина и количество каналов изображений, соответственно. |
Для предикторов, возвращенных в таблицах, элементы должны содержать числовой скаляр, числовой вектор-строку или массив ячеек 1 на 1, содержащий числовой массив.
Формат ответов зависит от типа задачи.
Задача | Формат отклика |
---|---|
Классификация изображений | Категориальный скаляр |
Регрессия изображений |
|
Для ответов, возвращенных в таблицах, элементы должны быть категориальным скаляром, числовым скаляром, числовым вектором-строкой или массивом ячеек 1 на 1, содержащим числовой массив.
Для получения дополнительной информации смотрите Datastores для глубокого обучения.
Для данных, которые помещаются в памяти и не требуют дополнительной обработки, такой как увеличение, можно задать набор данных изображений как числовой массив. Если вы задаете изображения как числовой массив, то вы также должны задать responses
аргумент.
Размер и форма числового массива зависят от типа данных изображения.
Данные | Формат |
---|---|
2-D изображения | h w c N числовым массивом, где h, w, и c высота, ширина, и количество каналов изображений, соответственно, и N, является количеством изображений. |
3-D изображения | <reservedrangesplaceholder9>-by-<reservedrangesplaceholder8>-by-<reservedrangesplaceholder7>-by-<reservedrangesplaceholder6>-by-<reservedrangesplaceholder5> числовой массив, где h, w, d, и c высота, ширина, глубина, и количество каналов изображений, соответственно, и N, является количеством изображений. |
В качестве альтернативы хранилищам данных или числовым массивам можно также задать изображения и отклики в таблице. Если вы задаете изображения как таблицу, то можно также задать, какие столбцы содержат ответы, используя responses
аргумент.
При указании изображений и откликов в таблице каждая строка в таблице соответствует наблюдению.
Для входа изображений предикторы должны быть в первом столбце таблицы, заданные как один из следующих:
Абсолютный или относительный путь к файлу изображения, заданный как вектор символов
Массив ячеек 1 на 1, содержащий h -by- w -by- c числовой массив, представляющий 2-D изображение, где h, w и c соответствуют высоте, ширине и количеству каналов изображения, соответственно.
Формат ответов зависит от типа задачи.
Задача | Формат отклика |
---|---|
Классификация изображений | Категориальный скаляр |
Регрессия изображений |
|
Для нейронных сетей с входом изображений, если вы не задаете responses
, тогда функция по умолчанию использует первый столбец tbl
для предикторов и последующих столбцов в качестве ответов.
Совет
Если предикторы или ответы содержат NaN
s, затем они распространяются через сеть во время обучения. В этих случаях обучение обычно не сходится.
Совет
Для регрессионных задач нормализация реакций часто помогает стабилизировать и ускорить обучение нейронных сетей для регрессии. Для получения дополнительной информации см. «Train сверточной нейронной сети для регрессии».
sequences
- Данные последовательности или временных рядовПоследовательность или данные временных рядов, заданные как одно из следующего:
Тип данных | Описание | Использование примера | |
---|---|---|---|
Datastore | TransformedDatastore | Datastore, который преобразует пакеты данных, считанных из базового datastore, с помощью пользовательской функции преобразования. |
|
CombinedDatastore | Datastore, который читается из двух или нескольких базовых хранилищ данных. | Объедините предикторы и ответы из различных источников данных. | |
Пользовательский мини-пакет datastore | Пользовательский datastore, который возвращает мини-пакеты данных. | Обучите нейронную сеть с помощью данных в формате, который не поддерживают другие хранилища данных. Для получения дополнительной информации смотрите Разработку Пользовательского Мини-Пакета Datastore. | |
Числовой массив или массив ячеек | Одна последовательность, заданная как числовой массив или набор данных, заданный как массив ячеек числовых массивов. Если вы задаете последовательности как число или массив ячеек, то вы также должны задать responses аргумент. | Обучите нейронную сеть с помощью данных, которые помещаются в памяти и не требуют дополнительной обработки, подобной пользовательским преобразованиям. |
Datastores читают мини-пакеты последовательностей и ответов. Datastores лучше всего подходит, когда у вас есть данные, которые не помещаются в памяти, или когда вы хотите применить преобразования к данным.
В приведенном ниже списке перечислены хранилища данных, которые непосредственно совместимы с trainNetwork
для данных последовательности.
Можно использовать другие встроенные хранилища данных для обучения нейронных сетей для глубокого обучения при помощи transform
и combine
функций. Эти функции могут преобразовать данные, считанные из хранилищ данных, в формат таблицы или массива ячеек, требуемый trainNetwork
. Для примера можно преобразовать и объединить данные, считанные из массивов в памяти, и файлы CSV с помощью ArrayDatastore
и TabularTextDatastore
объекты, соответственно.
datastore должен возвращать данные в таблице или массиве ячеек. Пользовательские мини-пакетные хранилища данных должны выводить таблицы.
Выход Datastore | Пример выхода |
---|---|
Таблица |
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 -by- d -by- c -by- s массив, где h, w, d и c соответствуют высоте, ширине, глубине и количеству каналов изображения, соответственно, и s является длиной последовательности. Каждая последовательность в мини-пакете должна иметь одинаковую длину. |
Для предикторов, возвращенных в таблицах, элементы должны содержать числовой скаляр, числовой вектор-строку или массив ячеек 1 на 1, содержащий числовой массив.
Формат ответов зависит от типа задачи.
Задача | Формат ответов |
---|---|
Классификация от последовательности до метки | Категориальный скаляр |
Регрессия от последовательности к единице | Скаляр |
Векторная регрессия | Числовой вектор-строка |
Классификация последовательность-последовательность | 1-by - s последовательность категориальных меток, где s - длина последовательности соответствующей последовательности предикторов. |
Регрессия от последовательности к последовательности | R -by - s матрица, где R - количество откликов, а s - длина последовательности соответствующего предиктора. |
Для ответов, возвращенных в таблицах, элементы должны быть категориальным скаляром, числовым скаляром, числовым вектором-строкой или массивом ячеек 1 на 1, содержащим числовой массив.
Для получения дополнительной информации смотрите Datastores для глубокого обучения.
Для данных, которые помещаются в памяти и не требуют дополнительной обработки, такой как пользовательские преобразования, можно задать одну последовательность в качестве числового массива или набора данных в качестве массива ячеек числовых массивов. Если вы задаете последовательности как массив ячеек или числовой массив, то вы также должны задать responses
аргумент.
Для входа массива ячеек массив ячеек должен быть массивом ячеек N на 1 числовых массивов, где N количество наблюдений. Размер и форма числового массива, представляющего последовательность, зависят от типа данных последовательности:
Вход | Описание |
---|---|
Векторные последовательности | c -by - s матрицы, где c - количество функций последовательностей, а s - длина последовательности. |
2-D последовательности изображений | h -by- w -by- c -by- s массивы, где h, w и c соответствуют высоте, ширине и количеству каналов изображений, соответственно, и s является длиной последовательности. |
3-D последовательности изображений | <reservedrangesplaceholder9>-by-<reservedrangesplaceholder8>-by-<reservedrangesplaceholder7>-by-<reservedrangesplaceholder6>-by-<reservedrangesplaceholder5>, где h, w, d, и c соответствуют высоте, ширине, глубине, и количество каналов 3D изображений, соответственно, и s - длина последовательности. |
Совет
Если предикторы или ответы содержат NaN
s, затем они распространяются через сеть во время обучения. В этих случаях обучение обычно не сходится.
Совет
Для регрессионных задач нормализация ответов часто помогает стабилизировать и ускорить обучение. Для получения дополнительной информации см. «Train сверточной нейронной сети для регрессии».
features
- Данные о функцияхДанные о функциях, заданные как одно из следующих:
Тип данных | Описание | Использование примера | |
---|---|---|---|
Datastore | TransformedDatastore | Datastore, который преобразует пакеты данных, считанных из базового datastore, с помощью пользовательской функции преобразования. |
|
CombinedDatastore | Datastore, который читается из двух или нескольких базовых хранилищ данных. |
| |
Пользовательский мини-пакет datastore | Пользовательский datastore, который возвращает мини-пакеты данных. | Обучите нейронную сеть с помощью данных в формате, который не поддерживают другие хранилища данных. Для получения дополнительной информации смотрите Разработку Пользовательского Мини-Пакета Datastore. | |
Таблица | Данные о функциях, заданные как таблица. Если вы задаете функции как таблицу, то можно также задать, какие столбцы содержат отклики с помощью responses аргумент. | Обучите нейронную сеть с помощью данных, хранящихся в таблице. | |
Числовой массив | Данные функции заданы как числовой массив. Если вы задаете функции как числовой массив, то вы также должны задать responses аргумент. | Обучите нейронную сеть с помощью данных, которые помещаются в памяти и не требуют дополнительной обработки, подобной пользовательским преобразованиям. |
Datastores считывают мини-пакеты данных о функциях и ответов. Datastores лучше всего подходит, когда у вас есть данные, которые не помещаются в памяти, или когда вы хотите применить преобразования к данным.
В приведенном ниже списке перечислены хранилища данных, которые непосредственно совместимы с trainNetwork
для данных о функциях.
Пользовательский мини-пакет datastore
Можно использовать другие встроенные хранилища данных для обучения нейронных сетей для глубокого обучения при помощи transform
и combine
функций. Эти функции могут преобразовать данные, считанные из хранилищ данных, в формат таблицы или массива ячеек, требуемый trainNetwork
. Для получения дополнительной информации смотрите Datastores для глубокого обучения.
Для сетей с несколькими входами datastore должен быть TransformedDatastore
или CombinedDatastore
объект.
datastore должен возвращать данные в таблице или массиве ячеек. Пользовательские мини-пакетные хранилища данных должны выводить таблицы. Формат выхода datastore зависит от сетевой архитектуры.
Сетевая архитектура | Выход Datastore | Пример выхода |
---|---|---|
Один входной слой | Таблица или массив ячеек с двумя столбцами. Первый и второй столбцы задают предикторы и отклики, соответственно. Элементы таблицы должны быть скалярами, векторами-строками или массивами ячеек 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 векторами-на-1, где c количество функций.
Формат ответов зависит от типа задачи.
Задача | Формат ответов |
---|---|
Классификация | Категориальный скаляр |
Регресс |
|
Для получения дополнительной информации смотрите Datastores для глубокого обучения.
Для данных о функциях, которые помещаются в памяти и не требуют дополнительной обработки, такой как пользовательские преобразования, можно задать данные о функциях и ответы как таблицу.
Каждая строка в таблице соответствует наблюдению. Расположение предикторов и откликов в столбцах таблицы зависит от типа задачи.
Задача | Предсказатели | Ответы |
---|---|---|
Классификация функций | Функции, заданные в одном или нескольких столбцах как скаляры. Если вы не задаете | Категориальная метка |
Регрессия функций | Один или несколько столбцов скалярных значений |
Для сетей классификации с входом функции, если вы не задаете responses
аргумент, затем функция, по умолчанию, использует первый (numColumns - 1
) столбцы tbl
для предикторов и последнего столбца для меток, где numFeatures
- количество функций во входных данных.
Для регрессионных сетей с функцией входа, если вы не задаете responseNames
аргумент, затем функция, по умолчанию, использует первый numFeatures
столбцы для предикторов и последующие столбцы для ответов, где numFeatures
- количество функций во входных данных.
Для данных о функциях, которые помещаются в памяти и не требуют дополнительной обработки, такой как пользовательские преобразования, можно задать данные о функциях как числовой массив. Если вы задаете данные функции как числовой массив, то вы также должны задать responses
аргумент.
Числовой массив должен быть N -by- numFeatures
числовой массив, где N - количество наблюдений и numFeatures
- количество функций входных данных.
Совет
Нормализация реакций часто помогает стабилизировать и ускорить обучение нейронных сетей регрессии. Для получения дополнительной информации см. «Train сверточной нейронной сети для регрессии».
Совет
Ответы не должны содержать NaN
s. Если данные предиктора содержат NaN
s, затем они распространяются через обучение. Однако в большинстве случаев обучение не сходится.
responses
- ОтветыОтветы.
Когда входные данные являются числовым массивом массива ячеек, задайте ответы как один из следующих.
категориальный вектор меток
числовой массив числовых откликов
категориальные или числовые последовательности массива ячеек
Когда входные данные являются таблицей, можно опционально задать, какие столбцы таблицы содержат ответы, как одно из следующего:
вектор символов
массив ячеек из векторов символов
Строковые массивы
Когда входные данные являются числовым массивом или массивом ячеек, то формат ответов зависит от типа задачи.
Задача | Формат | |
---|---|---|
Классификация | Классификация изображений | N -by-1 категориальный вектор меток, где N - количество наблюдений. |
Классификация функций | ||
Классификация от последовательности до метки | ||
Классификация последовательность-последовательность | N ячеек -by-1 категориальных последовательностей меток, где N количество наблюдений. Каждая последовательность должна иметь то же количество временных шагов, что и соответствующая последовательность предиктора. Для задач классификации «последовательность-последовательность» с одним наблюдением, | |
Регресс | 2-D регрессию изображения |
|
3-D регрессию изображения |
| |
Регрессия функций | N -by - R матрица, где N - количество наблюдений, а R - количество откликов. | |
Регрессия от последовательности к единице | N -by - R матрица, где N - количество последовательностей, а R - количество откликов. | |
Регрессия от последовательности к последовательности | N ячеек -by-1 числовых последовательностей, где N количество последовательностей. Последовательности являются матрицами с R строками, где R количество откликов. Каждая последовательность должна иметь то же количество временных шагов, что и соответствующая последовательность предиктора. Для регрессионных задач от последовательности к последовательности с одним наблюдением, |
Совет
Нормализация реакций часто помогает стабилизировать и ускорить обучение нейронных сетей регрессии. Для получения дополнительной информации см. «Train сверточной нейронной сети для регрессии».
Совет
Ответы не должны содержать NaN
s. Если данные предиктора содержат NaN
s, затем они распространяются через обучение. Однако в большинстве случаев обучение не сходится.
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
задает данные валидации. The '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
function, или когда вы используете функции предсказания или валидации с DAGNetwork
и SeriesNetwork
объекты, программное обеспечение выполняет эти расчеты с помощью арифметики с одной точностью и плавающей точкой. Функции для обучения, предсказания и валидации включают trainNetwork
, predict
, classify
, и activations
. Программа использует арифметику с одной точностью, когда вы обучаете сети, используя как центральные процессоры, так и графические процессоры.
Предупреждает, начиная с R2021a
При определении данных последовательности для trainNetwork
функция, поддержка определения таблиц путей к файлам MAT будет удалена в следующем релизе.
Чтобы обучить сети с последовательностями, которые не помещаются в памяти, используйте datastore. Вы можете использовать любой datastore, чтобы считать ваши данные и затем использовать transform
функция для преобразования выхода datastore в формат 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
данные, или datastore, который возвращает gpuArray
данные, "ExecutionEnvironment"
опция должен быть "auto"
или "gpu"
.
Для получения дополнительной информации смотрите Запуск функций MATLAB на графическом процессоре (Parallel Computing Toolbox).
analyzeNetwork
| assembleNetwork
| classify
| DAGNetwork
| Deep Network Designer | LayerGraph
| predict
| SeriesNetwork
| trainingOptions
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.