trainNetwork

Обучите глубокую нейронную сеть

Описание

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

Например, можно обучаться:

  • сверточная нейронная сеть (ConvNet, CNN) для данных изображения

  • рекуррентная нейронная сеть (RNN), такая как долгая краткосрочная память (LSTM) или сеть закрытого текущего модуля (GRU) для последовательности и данных timeseries

  • многоуровневая perceptron сеть (MLP) для числовых данных о функции

Можно обучаться или на центральном процессоре или на графическом процессоре. Для классификации изображений и регрессии изображений, можно обучить одну сеть в параллели с помощью нескольких графических процессоров или локального или удаленного параллельного пула. Обучение на графическом процессоре или параллельно требует Parallel Computing Toolbox™. Чтобы использовать графический процессор для глубокого обучения, у вас должно также быть поддерживаемое устройство графического процессора. Для получения информации о поддерживаемых устройствах смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox). Задавать опции обучения, включая опции для среды выполнения, использование trainingOptions функция.

При обучении нейронной сети можно задать предикторы и ответы как один вход или в двух отдельных входных параметрах.

пример

net = trainNetwork(images,layers,options) обучает нейронную сеть, заданную layers для классификации изображений и задач регрессии с помощью изображений и ответов задан images и опции обучения заданы options.

пример

net = trainNetwork(images,responses,layers,options) обучает использование изображений, заданных images и ответы заданы responses.

net = trainNetwork(sequences,layers,options) обучает нейронную сеть для последовательности или классификации timeseries и задач регрессии (например, LSTM или сеть ГРУ) использование последовательностей и ответов, заданных sequences.

пример

net = trainNetwork(sequences,responses,layers,options) обучает использование последовательностей, заданных sequences и ответы заданы responses.

пример

net = trainNetwork(features,layers,options) обучает нейронную сеть для классификации функций или задач регрессии (например, многоуровневая perceptron сеть (MLP)) использование данных о функции и ответов, заданных features.

net = trainNetwork(features,responses,layers,options) обучает использование данных о функции, заданных features и ответы заданы responses.

[net,info] = trainNetwork(___) также возвращает информацию об обучении с помощью любого из предыдущих синтаксисов.

Примеры

свернуть все

Загрузите данные как 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 5 000 массивов, где:

  • 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 5 000 массивов, где:

  • 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'. Чтобы обучаться на графическом процессоре, при наличии, устанавливает '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

Входные параметры

свернуть все

Данные изображения в виде одного из следующего:

Тип данныхОписаниеИспользование в качестве примера
DatastoreImageDatastoreDatastore, который содержит изображения и метки.

Обучайтесь нейронная сеть классификации изображений с изображениями экономила на диске, где изображения одного размера.

Когда изображения будут различными размерами, используйте AugmentedImageDatastore объект.

ImageDatastore объекты поддерживают задачи классификации изображений только. Чтобы использовать хранилища данных изображений для сетей регрессии, создайте преобразованный или объединенный datastore, который содержит изображения и ответы с помощью transform и combine функции, соответственно.

AugmentedImageDatastoreDatastore, который применяет случайные аффинные геометрические преобразования, включая изменение размеров, вращение, отражение, сдвиг и перевод.

  • Обучайтесь нейронная сеть классификации изображений с изображениями экономила на диске, где изображения являются различными размерами.

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

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

  • Обучите нейронную сеть регрессии изображений.

  • Обучите нейронные сети с несколькими входными параметрами.

  • Преобразуйте выходные параметры хранилищ данных, не поддержанных trainNetwork функционируйте к требуемого формата.

  • Примените пользовательские преобразования к datastore выход.

CombinedDatastoreDatastore, который читает из двух или больше базовых хранилищ данных.

  • Обучите нейронную сеть регрессии изображений.

  • Обучите нейронные сети с несколькими входными параметрами.

  • Объедините предикторы и ответы от различных источников данных.

PixelLabelImageDatastore (Computer Vision Toolbox)Datastore, который применяет идентичные аффинные геометрические преобразования к изображениям и соответствующим пиксельным меткам.Обучите нейронную сеть для семантической сегментации.
RandomPatchExtractionDatastore (Image Processing Toolbox)Datastore, который извлекает пары случайных закрашенных фигур от изображений или пиксельных изображений метки и опционально применяет идентичные случайные аффинные геометрические преобразования к парам.Обучите нейронную сеть для обнаружения объектов.
DenoisingImageDatastore (Image Processing Toolbox)Datastore, который применяет случайным образом сгенерированный Гауссов шум.Обучите нейронную сеть для шумоподавления изображений.
Пользовательский мини-пакетный datastoreПользовательский datastore, который возвращает мини-пакеты данных.

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

Для получения дополнительной информации смотрите, Разрабатывают Пользовательский Мини-пакетный Datastore.

Числовой массивИзображения, заданные как числовой массив. Если вы задаете изображения как числовой массив, то необходимо также задать responses аргумент.Обучите нейронную сеть с помощью данных, которые умещаются в памяти и не требуют дополнительной обработки как увеличение.
ТаблицаИзображения, заданные как таблица. Если вы задаете изображения как таблицу, то можно также задать, какие столбцы содержат ответы с помощью responses аргумент.Обучите нейронную сеть с помощью данных, хранимых в таблице.

Для сетей с несколькими входными параметрами datastore должен быть TransformedDatastore или CombinedDatastore объект.

Совет

Для последовательностей изображений, например, видеоданные, используют sequences входной параметр.

Datastore

Хранилища данных читают мини-пакеты изображений и ответов. Хранилища данных подходят лучше всего, когда у вас есть данные, которые не умещаются в памяти или, когда это необходимо, применять увеличения или преобразования к данным.

Список ниже перечисляет хранилища данных, которые непосредственно совместимы с trainNetwork для данных изображения.

Например, можно создать datastore изображений с помощью imageDatastore функционируйте и используйте имена папок, содержащих изображения как метки путем установки 'LabelSource' опция к 'foldernames'. В качестве альтернативы можно задать метки вручную с помощью Labels свойство 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]}

Несколько входных слоев

Массив ячеек с (numInputs + 1) столбцы, где numInputs количество сетевых входных параметров.

Первый numInputs столбцы задают предикторы для каждого входа, и последний столбец задает ответы.

Распоряжение входных параметров дано InputNames свойство графика слоев layers.

Массив ячеек для сети с двумя входными параметрами и одним выходом.

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]}

Формат предикторов зависит от типа данных.

ДанныеФормат
2D изображения

h-by-w-by-c числовой массив, где h, w и c являются высотой, шириной и количеством каналов изображений, соответственно.

3-D изображенияh-by-w-by-d-by-c числовой массив, где h, w, d и c являются высотой, шириной, глубиной и количеством каналов изображений, соответственно.

Для предикторов, возвращенных в таблицах, элементы должны содержать числовой скаляр, числовой вектор-строку или массив ячеек 1 на 1, содержащий числовой массив.

Формат ответов зависит от типа задачи.

ЗадачаФормат ответа
Отобразите классификациюКатегориальный скаляр
Отобразите регрессию
  • Числовой скаляр

  • Числовой вектор

  • 3-D числовой массив, представляющий 2D изображение

  • Числовой массив 4-D, представляющий 3-D изображение

Для ответов, возвращенных в таблицах, элементами должен быть категориальный скаляр, числовой скаляр, числовой вектор-строка или массив ячеек 1 на 1, содержащий числовой массив.

Для получения дополнительной информации смотрите Хранилища данных для Глубокого обучения.

Числовой массив

Для данных, которые умещаются в памяти и не требуют дополнительной обработки как увеличение, можно задать набор данных изображений как числовой массив. Если вы задаете изображения как числовой массив, то необходимо также задать responses аргумент.

Размер и форма числового массива зависят от типа данных изображения.

ДанныеФормат
2D изображения

h-by-w-by-c-by-N числовой массив, где h, w и c являются высотой, шириной, и количеством каналов изображений, соответственно, и N, является количеством изображений.

3-D изображенияh-by-w-by-d-by-c-by-N числовой массив, где h, w, d и c являются высотой, шириной, глубиной, и количеством каналов изображений, соответственно, и N, является количеством изображений.

Таблица

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

При определении изображений и ответов в таблице, каждая строка в таблице соответствует наблюдению.

Для входа изображений предикторы должны быть в первом столбце таблицы в виде одного из следующего:

  • Путь к абсолютному или файлу прямого доступа к изображению в виде вектора символов

  • Массив ячеек 1 на 1, содержащий h-by-w-by-c числовой массив, представляющий 2D изображение, где h, w и c соответствуют высоте, ширине и количеству каналов изображения, соответственно.

Формат ответов зависит от типа задачи.

ЗадачаФормат ответа
Отобразите классификациюКатегориальный скаляр
Отобразите регрессию
  • Числовой скаляр

  • Два или больше столбца скалярных значений

  • Массив ячеек 1 на 1, содержащий h-by-w-by-c числовой массив, представляющий 2D изображение

  • Массив ячеек 1 на 1, содержащий h-by-w-by-d-by-c числовой массив, представляющий 3-D изображение

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

Совет

Если предикторы или ответы содержат NaNs, затем они распространены через сеть во время обучения. В этих случаях обучению обычно не удается сходиться.

Совет

Для задач регрессии нормализация ответов часто помогает стабилизироваться и ускорить обучение нейронных сетей для регрессии. Для получения дополнительной информации смотрите, Обучают Сверточную нейронную сеть Регрессии.

Последовательность или данные временных рядов в виде одного из следующего:

Тип данныхОписаниеИспользование в качестве примера
DatastoreTransformedDatastoreDatastore, который преобразовывает пакеты данных, считанных из базового datastore с помощью пользовательской функции преобразования.

  • Преобразуйте выходные параметры хранилищ данных, не поддержанных trainNetwork к требуемого формата.

  • Примените пользовательские преобразования к datastore выход.

CombinedDatastoreDatastore, который читает из двух или больше базовых хранилищ данных.

Объедините предикторы и ответы от различных источников данных.

Пользовательский мини-пакетный datastoreПользовательский datastore, который возвращает мини-пакеты данных.

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

Для получения дополнительной информации смотрите, Разрабатывают Пользовательский Мини-пакетный Datastore.

Числовой массив или массив ячеекОдна последовательность, заданная как числовой массив или набор данных последовательностей, заданных как массив ячеек числовых массивов. Если вы задаете последовательности как числовой массив или массив ячеек, то необходимо также задать responses аргумент.Обучите нейронную сеть с помощью данных, которые умещаются в памяти и не требуют дополнительной обработки как пользовательские преобразования.

Datastore

Хранилища данных читают мини-пакеты последовательностей и ответов. Хранилища данных подходят лучше всего, когда у вас есть данные, которые не умещаются в памяти или, когда это необходимо, применять преобразования к данным.

Список ниже перечисляет хранилища данных, которые непосредственно совместимы с 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  
CellArray
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, является длиной последовательности.

2D последовательность изображений

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, содержащий числовой массив.

Формат ответов зависит от типа задачи.

ЗадачаФормат ответов
Классификация последовательностей к меткеКатегориальный скаляр
Регрессия Sequence-one

Скаляр

Регрессия последовательности к вектору

Числовой вектор-строка

Классификация от последовательности к последовательности

1 s последовательностью категориальных меток, где s является длиной последовательности соответствующей последовательности предиктора.

Регрессия от последовательности к последовательности

R-by-s матрица, где R является количеством ответов и s, является длиной последовательности соответствующей последовательности предиктора.

Для ответов, возвращенных в таблицах, элементами должен быть категориальный скаляр, числовой скаляр, числовой вектор-строка или массив ячеек 1 на 1, содержащий числовой массив.

Для получения дополнительной информации смотрите Хранилища данных для Глубокого обучения.

Числовой массив или массив ячеек

Для данных, которые умещаются в памяти и не требуют дополнительной обработки как пользовательские преобразования, можно задать одну последовательность как числовой массив или набор данных последовательностей как массив ячеек числовых массивов. Если вы задаете последовательности как массив ячеек или числовой массив, то необходимо также задать responses аргумент.

Для входа массива ячеек массивом ячеек должен быть N-by-1 массив ячеек числовых массивов, где N является количеством наблюдений. Размер и форма числового массива, представляющего последовательность, зависят от типа данных о последовательности:

Входной параметрОписание
Векторные последовательностиc-by-s матрицы, где c является количеством функций последовательностей и s, является длиной последовательности.
2D последовательности изображений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 соответствуют высоте, ширине, глубине, и количеству каналов 3-D изображений, соответственно, и s, является длиной последовательности.

Совет

Если предикторы или ответы содержат NaNs, затем они распространены через сеть во время обучения. В этих случаях обучению обычно не удается сходиться.

Совет

Для задач регрессии нормализация ответов часто помогает стабилизироваться и ускорить обучение. Для получения дополнительной информации смотрите, Обучают Сверточную нейронную сеть Регрессии.

Покажите данные в виде одного из следующего:

Тип данныхОписаниеИспользование в качестве примера
DatastoreTransformedDatastoreDatastore, который преобразовывает пакеты данных, считанных из базового datastore с помощью пользовательской функции преобразования.

  • Обучите нейронные сети с несколькими входными параметрами.

  • Преобразуйте выходные параметры хранилищ данных, не поддержанных trainNetwork к требуемого формата.

  • Примените пользовательские преобразования к datastore выход.

CombinedDatastoreDatastore, который читает из двух или больше базовых хранилищ данных.

  • Обучите нейронные сети с несколькими входными параметрами.

  • Объедините предикторы и ответы от различных источников данных.

Пользовательский мини-пакетный datastoreПользовательский datastore, который возвращает мини-пакеты данных.

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

Для получения дополнительной информации смотрите, Разрабатывают Пользовательский Мини-пакетный Datastore.

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

Datastore

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

Список ниже перечисляет хранилища данных, которые непосредственно совместимы с trainNetwork для данных о функции.

Можно использовать другие встроенные хранилища данных для учебных нейронных сетей для глубокого обучения при помощи transform и combine функции. Эти функции могут преобразовать данные, считанные от хранилищ данных до таблицы или формата массива ячеек, требуемого trainNetwork. Для получения дополнительной информации смотрите Хранилища данных для Глубокого обучения.

Для сетей с несколькими входными параметрами 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]}

Несколько входных слоев

Массив ячеек с (numInputs + 1) столбцы, где numInputs количество сетевых входных параметров.

Первый numInputs столбцы задают предикторы для каждого входа, и последний столбец задает ответы.

Распоряжение входных параметров дано InputNames свойство графика слоев layers.

Массив ячеек для сети с двумя входными параметрами и одним выходом:

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 аргумент, затем предикторы должны быть в первом numFeatures столбцы таблицы, где numFeatures количество функций входных данных.

Категориальная метка

Покажите регрессию

Один или несколько столбцов скалярных значений

Для сетей классификации с входом функции, если вы не задаете responses аргумент, затем функция, по умолчанию, использует первое (numColumns - 1) столбцы tbl для предикторов и последнего столбца для меток, где numFeatures количество функций во входных данных.

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

Числовой массив

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

Числовым массивом должен быть N-by-numFeatures числовой массив, где N является количеством наблюдений и numFeatures количество функций входных данных.

Совет

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

Совет

Ответы не должны содержать NaNs. Если данные о предикторе содержат NaNs, затем они распространены посредством обучения. Однако в большинстве случаев обучению не удается сходиться.

Ответы.

Когда входные данные будут числовым массивом массива ячеек, задайте ответы как одно из следующих.

  • категориальный вектор из меток

  • числовой массив числовых ответов

  • массив ячеек категориальные или числовые последовательности

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

  • символьный вектор

  • массив ячеек из символьных векторов

  • массив строк

Когда входные данные являются числовым массивом или массивом ячеек, затем формат ответов зависит от типа задачи.

ЗадачаФормат
КлассификацияОтобразите классификациюN-by-1 категориальный вектор из меток, где N является количеством наблюдений.
Покажите классификацию
Классификация последовательностей к метке
Классификация от последовательности к последовательности

N-by-1 массив ячеек категориальных последовательностей меток, где N является количеством наблюдений. Каждая последовательность должна иметь то же количество временных шагов как соответствующая последовательность предиктора.

Для задач классификации от последовательности к последовательности с одним наблюдением, sequences может также быть вектор. В этом случае, Y должна быть категориальная последовательность меток.

Регрессия2D регрессия изображений
  • N-by-R матрица, где N является количеством изображений и R, является количеством ответов.

  • h-by-w-by-c-by-N числовой массив, где h, w и c являются высотой, шириной, и количеством каналов изображений, соответственно, и N, является количеством изображений.

3-D регрессия изображений
  • N-by-R матрица, где N является количеством изображений и R, является количеством ответов.

  • h-by-w-by-d-by-c-by-N числовой массив, где h, w, d и c являются высотой, шириной, глубиной, и количеством каналов изображений, соответственно, и N, является количеством изображений.

Покажите регрессию

N-by-R матрица, где N является количеством наблюдений и R, является количеством ответов.

Регрессия Sequence-oneN-by-R матрица, где N является количеством последовательностей и R, является количеством ответов.
Регрессия от последовательности к последовательности

N-by-1 массив ячеек числовых последовательностей, где N является количеством последовательностей. Последовательности являются матрицами со строками R, где R является количеством ответов. Каждая последовательность должна иметь то же количество временных шагов как соответствующая последовательность предиктора.

Для задач регрессии от последовательности к последовательности с одним наблюдением, sequences может быть матрица. В этом случае, responses должна быть матрица ответов.

Совет

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

Совет

Ответы не должны содержать NaNs. Если данные о предикторе содержат NaNs, затем они распространены посредством обучения. Однако в большинстве случаев обучению не удается сходиться.

Слоя сети в виде Layer массив или LayerGraph объект.

Чтобы создать сеть со всеми слоями, соединенными последовательно, можно использовать Layer массив как входной параметр. В этом случае возвращенной сетью является SeriesNetwork объект.

Сеть направленного графа без петель (DAG) имеет комплексную структуру, в которой слои могут иметь несколько вводов и выводов. Чтобы создать сеть DAG, задайте сетевую архитектуру как LayerGraph возразите и затем используйте тот график слоев в качестве входного параметра к trainNetwork.

Для списка встроенных слоев смотрите Список слоев глубокого обучения.

Опции обучения в виде TrainingOptionsSGDM, TrainingOptionsRMSProp, или TrainingOptionsADAM объект, возвращенный trainingOptions функция.

Выходные аргументы

свернуть все

Обучивший сеть, возвращенный как SeriesNetwork возразите или DAGNetwork объект.

Если вы обучаете сеть с помощью Layer массив, затем net SeriesNetwork объект. Если вы обучаете сеть с помощью LayerGraph объект, затем net DAGNetwork объект.

Учебная информация, возвращенная как структура, где каждое поле является скаляром или числовым вектором с одним элементом на учебную итерацию.

Для задач классификации, 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 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

Ссылки

[1] Kudo, M. J. Тояма, и М. Шимбо. "Многомерная Классификация Кривых Используя Прохождение через области". Буквы Распознавания образов. Издание 20, № 11-13, стр 1103–1111.

[2] Kudo, M. J. Тояма, и М. Шимбо. Японский Набор данных Гласных. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels

Расширенные возможности

Введенный в R2016a