exponenta event banner

trainNetwork

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

Описание

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

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

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

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

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

Вы можете обучаться либо на CPU, либо на GPU. Для классификации изображений и регрессии изображений можно параллельно обучать одну сеть, используя несколько графических процессоров или локальный или удаленный параллельный пул. Обучение на GPU или параллельно требует 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) обучает нейронную сеть для задач классификации последовательностей или временных рядов и регрессии (например, сеть LSTM или GRU), используя последовательности и ответы, указанные sequences.

пример

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

пример

net = trainNetwork(features,layers,options) обучает нейронную сеть для задач классификации признаков или регрессии (например, многоуровневая сеть перцептрона (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');

Хранилище данных содержит 10 000 синтетических изображений цифр от 0 до 9. Изображения генерируются путем применения случайных преобразований к цифровым изображениям, созданным различными шрифтами. Каждая цифра изображения составляет 28 на 28 пикселей. Хранилище данных содержит равное количество изображений для каждой категории.

Отображение некоторых изображений в хранилище данных.

figure
numImages = 10000;
perm = randperm(numImages,20);
for i = 1:20
    subplot(4,5,i);
    imshow(imds.Files{perm(i)});
    drawnow;
end

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

numTrainingFiles = 750;
[imdsTrain,imdsTest] = splitEachLabel(imds,numTrainingFiles,'randomize');

splitEachLabel разделяет файлы изображений в digitData в два новых хранилища данных, imdsTrain и imdsTest.

Определите архитектуру сверточной нейронной сети.

layers = [ ...
    imageInputLayer([28 28 1])
    convolution2dLayer(5,20)
    reluLayer
    maxPooling2dLayer(2,'Stride',2)
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

Установите параметры по умолчанию для стохастического градиентного спуска с импульсом. Установите максимальное количество эпох на 20 и начните обучение с начальной скоростью обучения 0,0001.

options = trainingOptions('sgdm', ...
    'MaxEpochs',20,...
    'InitialLearnRate',1e-4, ...
    'Verbose',false, ...
    'Plots','training-progress');

Обучение сети.

net = trainNetwork(imdsTrain,layers,options);

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

YPred = classify(net,imdsTest);
YTest = imdsTest.Labels;

Рассчитайте точность. Точность - это отношение количества истинных меток в тестовых данных, соответствующих классификациям из classify к количеству изображений в тестовых данных.

accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.9420

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

Загрузите образец данных, который состоит из синтетических изображений рукописных цифр.

[XTrain,YTrain] = digitTrain4DArrayData;

digitTrain4DArrayData загружает набор обучающих цифр 4-D виде данных массива. XTrain множество 28 на 28 на 1 на 5000, где:

  • 28 - высота и ширина изображений.

  • 1 - количество каналов.

  • 5000 - количество синтетических изображений рукописных цифр.

YTrain - категориальный вектор, содержащий метки для каждого наблюдения.

Отложите 1000 изображений для проверки сети.

idx = randperm(size(XTrain,4),1000);
XValidation = XTrain(:,:,:,idx);
XTrain(:,:,:,idx) = [];
YValidation = YTrain(idx);
YTrain(idx) = [];

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

imageAugmenter = imageDataAugmenter( ...
    'RandRotation',[-20,20], ...
    'RandXTranslation',[-3 3], ...
    'RandYTranslation',[-3 3])
imageAugmenter = 
  imageDataAugmenter with properties:

           FillValue: 0
     RandXReflection: 0
     RandYReflection: 0
        RandRotation: [-20 20]
           RandScale: [1 1]
          RandXScale: [1 1]
          RandYScale: [1 1]
          RandXShear: [0 0]
          RandYShear: [0 0]
    RandXTranslation: [-3 3]
    RandYTranslation: [-3 3]

Создание augmentedImageDatastore объект, используемый для обучения сети, и укажите размер вывода изображения. Во время обучения хранилище данных выполняет увеличение изображения и изменяет его размер. Хранилище данных дополняет изображения, не сохраняя их в памяти. trainNetwork обновляет параметры сети и затем отбрасывает дополненные изображения.

imageSize = [28 28 1];
augimds = augmentedImageDatastore(imageSize,XTrain,YTrain,'DataAugmentation',imageAugmenter);

Укажите архитектуру сверточной нейронной сети.

layers = [
    imageInputLayer(imageSize)
    
    convolution2dLayer(3,8,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,16,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,32,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

Укажите варианты обучения стохастического градиентного спуска с импульсом.

opts = trainingOptions('sgdm', ...
    'MaxEpochs',15, ...
    'Shuffle','every-epoch', ...
    'Plots','training-progress', ...
    'Verbose',false, ...
    'ValidationData',{XValidation,YValidation});

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

net = trainNetwork(augimds,layers,opts);

Загрузите образец данных, который состоит из синтетических изображений рукописных цифр. Третий вывод содержит соответствующие углы в градусах, на которые повернуто каждое изображение.

Загрузка обучающих образов в виде массивов 4-D с помощью digitTrain4DArrayData. Продукция XTrain множество 28 на 28 на 1 на 5000, где:

  • 28 - высота и ширина изображений.

  • 1 - количество каналов.

  • 5000 - количество синтетических изображений рукописных цифр.

YTrain содержит углы поворота в градусах.

[XTrain,~,YTrain] = digitTrain4DArrayData;

Отображение 20 случайных обучающих изображений с помощью imshow.

figure
numTrainImages = numel(YTrain);
idx = randperm(numTrainImages,20);
for i = 1:numel(idx)
    subplot(4,5,i)    
    imshow(XTrain(:,:,:,idx(i)))
    drawnow;
end

Укажите архитектуру сверточной нейронной сети. Для проблем регрессии следует включить уровень регрессии в конце сети.

layers = [ ...
    imageInputLayer([28 28 1])
    convolution2dLayer(12,25)
    reluLayer
    fullyConnectedLayer(1)
    regressionLayer];

Укажите параметры сетевого обучения. Установите начальную скорость обучения на 0,001.

options = trainingOptions('sgdm', ...
    'InitialLearnRate',0.001, ...
    'Verbose',false, ...
    'Plots','training-progress');

Обучение сети.

net = trainNetwork(XTrain,YTrain,layers,options);

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

[XTest,~,YTest] = digitTest4DArrayData;
YPred = predict(net,XTest);

Оцените производительность модели путем вычисления среднеквадратической ошибки (RMSE) прогнозируемого и фактического углов поворота.

rmse = sqrt(mean((YTest - YPred).^2))
rmse = single
    6.0356

Обучение сети LSTM глубокому обучению классификации «последовательность-метка».

Загрузите набор данных японских гласных, как описано в [1] и [2]. XTrain - клеточный массив, содержащий 270 последовательностей различной длины с 12 признаками, соответствующими коэффициентам кепстра LPC. Y - категориальный вектор меток 1,2,..., 9. Записи вXTrain представляют собой матрицы с 12 строками (по одной строке для каждого признака) и различным количеством столбцов (по одному столбцу для каждого временного шага).

[XTrain,YTrain] = japaneseVowelsTrainData;

Визуализация первого временного ряда на графике. Каждая строка соответствует элементу.

figure
plot(XTrain{1}')
title("Training Observation 1")
numFeatures = size(XTrain{1},1);
legend("Feature " + string(1:numFeatures),'Location','northeastoutside')

Определите архитектуру сети LSTM. Укажите размер ввода как 12 (количество элементов входных данных). Укажите уровень LSTM, который должен иметь 100 скрытых единиц и выводить последний элемент последовательности. Наконец, укажите девять классов, включив полностью соединенный слой размера 9, за которым следуют слой softmax и слой классификации.

inputSize = 12;
numHiddenUnits = 100;
numClasses = 9;

layers = [ ...
    sequenceInputLayer(inputSize)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer]
layers = 
  5×1 Layer array with layers:

     1   ''   Sequence Input          Sequence input with 12 dimensions
     2   ''   LSTM                    LSTM with 100 hidden units
     3   ''   Fully Connected         9 fully connected layer
     4   ''   Softmax                 softmax
     5   ''   Classification Output   crossentropyex

Укажите параметры обучения. Укажите решатель как 'adam' и 'GradientThreshold' как 1. Установите размер мини-партии равным 27 и максимальное количество периодов равным 70.

Поскольку мини-пакеты малы с короткими последовательностями, ЦП лучше подходит для обучения. Набор 'ExecutionEnvironment' кому 'cpu'. Обучение на GPU, если доступно, установить 'ExecutionEnvironment' кому 'auto' (значение по умолчанию).

maxEpochs = 70;
miniBatchSize = 27;

options = trainingOptions('adam', ...
    'ExecutionEnvironment','cpu', ...
    'MaxEpochs',maxEpochs, ...
    'MiniBatchSize',miniBatchSize, ...
    'GradientThreshold',1, ...
    'Verbose',false, ...
    'Plots','training-progress');

Обучение сети LSTM с указанными вариантами обучения.

net = trainNetwork(XTrain,YTrain,layers,options);

Загрузите тестовый набор и классифицируйте последовательности в динамики.

[XTest,YTest] = japaneseVowelsTestData;

Классифицируйте данные теста. Укажите размер мини-партии, используемый для обучения.

YPred = classify(net,XTest,'MiniBatchSize',miniBatchSize);

Вычислите точность классификации прогнозов.

acc = sum(YPred == YTest)./numel(YTest)
acc = 0.9514

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

Считывание данных корпуса коробки передач из CSV-файла "transmissionCasingData.csv".

filename = "transmissionCasingData.csv";
tbl = readtable(filename,'TextType','String');

Преобразовать метки для прогнозирования в категориальные с помощью convertvars функция.

labelName = "GearToothCondition";
tbl = convertvars(tbl,labelName,'categorical');

Чтобы обучить сеть с помощью категориальных элементов, необходимо сначала преобразовать категориальные элементы в числовые. Во-первых, преобразуйте категориальные предикторы в категориальные, используя convertvars путем указания строкового массива, содержащего имена всех категориальных входных переменных. В этом наборе данных имеются две категориальные функции с именами "SensorCondition" и "ShaftCondition".

categoricalInputNames = ["SensorCondition" "ShaftCondition"];
tbl = convertvars(tbl,categoricalInputNames,'categorical');

Закольцовывать категориальные входные переменные. Для каждой переменной:

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

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

  • Удалите соответствующий столбец, содержащий категориальные данные.

for i = 1:numel(categoricalInputNames)
    name = categoricalInputNames(i);
    oh = onehotencode(tbl(:,name));
    tbl = addvars(tbl,oh,'After',name);
    tbl(:,name) = [];
end

Разбейте векторы на отдельные столбцы с помощью splitvars функция.

tbl = splitvars(tbl);

Просмотрите первые несколько строк таблицы. Обратите внимание, что категориальные предикторы были разделены на несколько столбцов с категориальными значениями в качестве имен переменных.

head(tbl)
ans=8×23 table
    SigMean     SigMedian    SigRMS    SigVar     SigPeak    SigPeak2Peak    SigSkewness    SigKurtosis    SigCrestFactor    SigMAD     SigRangeCumSum    SigCorrDimension    SigApproxEntropy    SigLyapExponent    PeakFreq    HighFreqPower    EnvPower    PeakSpecKurtosis    No Sensor Drift    Sensor Drift    No Shaft Wear    Shaft Wear    GearToothCondition
    ________    _________    ______    _______    _______    ____________    ___________    ___________    ______________    _______    ______________    ________________    ________________    _______________    ________    _____________    ________    ________________    _______________    ____________    _____________    __________    __________________

    -0.94876     -0.9722     1.3726    0.98387    0.81571       3.6314        -0.041525       2.2666           2.0514         0.8081        28562              1.1429             0.031581            79.931            0          6.75e-06       3.23e-07         162.13                0                1                1              0           No Tooth Fault  
    -0.97537    -0.98958     1.3937    0.99105    0.81571       3.6314        -0.023777       2.2598           2.0203        0.81017        29418              1.1362             0.037835            70.325            0          5.08e-08       9.16e-08         226.12                0                1                1              0           No Tooth Fault  
      1.0502      1.0267     1.4449    0.98491     2.8157       3.6314         -0.04162       2.2658           1.9487        0.80853        31710              1.1479             0.031565            125.19            0          6.74e-06       2.85e-07         162.13                0                1                0              1           No Tooth Fault  
      1.0227      1.0045     1.4288    0.99553     2.8157       3.6314        -0.016356       2.2483           1.9707        0.81324        30984              1.1472             0.032088             112.5            0          4.99e-06        2.4e-07         162.13                0                1                0              1           No Tooth Fault  
      1.0123      1.0024     1.4202    0.99233     2.8157       3.6314        -0.014701       2.2542           1.9826        0.81156        30661              1.1469              0.03287            108.86            0          3.62e-06       2.28e-07         230.39                0                1                0              1           No Tooth Fault  
      1.0275      1.0102     1.4338     1.0001     2.8157       3.6314         -0.02659       2.2439           1.9638        0.81589        31102              1.0985             0.033427            64.576            0          2.55e-06       1.65e-07         230.39                0                1                0              1           No Tooth Fault  
      1.0464      1.0275     1.4477     1.0011     2.8157       3.6314        -0.042849       2.2455           1.9449        0.81595        31665              1.1417             0.034159            98.838            0          1.73e-06       1.55e-07         230.39                0                1                0              1           No Tooth Fault  
      1.0459      1.0257     1.4402    0.98047     2.8157       3.6314        -0.035405       2.2757            1.955        0.80583        31554              1.1345               0.0353            44.223            0          1.11e-06       1.39e-07         230.39                0                1                0              1           No Tooth Fault  

Просмотр имен классов набора данных.

classNames = categories(tbl{:,labelName})
classNames = 2×1 cell
    {'No Tooth Fault'}
    {'Tooth Fault'   }

Затем разбейте набор данных на разделы обучения и тестирования. Отложите 15% данных для тестирования.

Определите количество наблюдений для каждого раздела.

numObservations = size(tbl,1);
numObservationsTrain = floor(0.85*numObservations);
numObservationsTest = numObservations - numObservationsTrain;

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

idx = randperm(numObservations);
idxTrain = idx(1:numObservationsTrain);
idxTest = idx(numObservationsTrain+1:end);

Разбиение таблицы данных на разделы обучения, проверки и тестирования с использованием индексов.

tblTrain = tbl(idxTrain,:);
tblTest = tbl(idxTest,:);

Определите сеть с уровнем ввода элемента и укажите количество элементов. Также настройте входной уровень для нормализации данных с помощью Z-score нормализации.

numFeatures = size(tbl,2) - 1;
numClasses = numel(classNames);
 
layers = [
    featureInputLayer(numFeatures,'Normalization', 'zscore')
    fullyConnectedLayer(50)
    batchNormalizationLayer
    reluLayer
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer];

Укажите параметры обучения.

miniBatchSize = 16;

options = trainingOptions('adam', ...
    'MiniBatchSize',miniBatchSize, ...
    'Shuffle','every-epoch', ...
    'Plots','training-progress', ...
    'Verbose',false);

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

net = trainNetwork(tblTrain,layers,options);

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

YPred = classify(net,tblTest,'MiniBatchSize',miniBatchSize);
YTest = tblTest{:,labelName};

accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.9688

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

свернуть все

Данные изображения, указанные как одно из следующих:

Тип данныхОписаниеПример использования
Хранилище данныхImageDatastoreХранилище данных, содержащее изображения и метки.

Нейронная сеть классификации изображений с изображениями, сохраненными на диске, где изображения имеют одинаковый размер.

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

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

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

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

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

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

  • Нейронная сеть регрессии изображения поезда.

  • Сеть поездов с несколькими входами.

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

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

CombinedDatastoreХранилище данных, считывающее данные из двух или более базовых хранилищ данных.

  • Нейронная сеть регрессии изображения поезда.

  • Сеть поездов с несколькими входами.

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

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

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

Дополнительные сведения см. в разделе Разработка собственного мини-хранилища пакетных данных.

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

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

Совет

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

Хранилище данных

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

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

Например, можно создать хранилище данных изображения с помощью imageDatastore и использовать имена папок, содержащих изображения, в качестве меток путем установки 'LabelSource' опция для 'foldernames'. Можно также указать метки вручную с помощью Labels свойства хранилища данных образа.

Обратите внимание, что ImageDatastore объекты позволяют выполнять пакетное чтение файлов изображений JPG или PNG с помощью предварительной выборки. Если для чтения изображений используется пользовательская функция, то ImageDatastore объекты не выполняют предварительную выборку.

Совет

Использовать augmentedImageDatastore для эффективной предварительной обработки изображений для глубокого обучения, включая изменение размеров изображений.

Не используйте readFcn вариант imageDatastore для предварительной обработки или изменения размера, поскольку этот параметр обычно значительно медленнее.

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

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

Требуемый формат выходных данных хранилища данных зависит от архитектуры сети.

Сетевая архитектураВыходные данные хранилища данныхПример вывода
Один входной слой

Таблица или массив ячеек с двумя столбцами.

Первый и второй столбцы определяют предикторы и ответы соответственно.

Элементы таблицы должны быть скалярами, векторами строк или массивами ячеек 1 на 1, содержащими числовой массив.

Пользовательские хранилища данных мини-пакетов должны выводить таблицы.

Таблица для сети с одним входом и одним выходом:

data = read(ds)
data =

  4×2 table

        Predictors        Response
    __________________    ________

    {224×224×3 double}       2    
    {224×224×3 double}       7    
    {224×224×3 double}       9    
    {224×224×3 double}       9  

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

data = read(ds)
data =

  4×2 cell array

    {224×224×3 double}    {[2]}
    {224×224×3 double}    {[7]}
    {224×224×3 double}    {[9]}
    {224×224×3 double}    {[9]}

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

Массив ячеек с (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]}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Стол

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

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

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

  • Абсолютный или относительный путь к изображению, заданный как символьный вектор

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

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

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

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

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

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

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

Совет

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

Совет

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

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

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

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

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

CombinedDatastoreХранилище данных, считывающее данные из двух или более базовых хранилищ данных.

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

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

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

Дополнительные сведения см. в разделе Разработка собственного мини-хранилища пакетных данных.

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

Хранилище данных

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

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

Можно использовать другие встроенные хранилища данных для обучения сетям глубокого обучения с помощью transform и combine функции. Эти функции могут преобразовывать данные, считанные из хранилищ данных, в формат таблицы или массива ячеек, требуемый trainNetwork. Например, можно преобразовать и объединить данные, считанные из массивов в памяти и CSV-файлов, используя ArrayDatastore и TabularTextDatastore соответственно.

Хранилище данных должно возвращать данные в таблице или массиве ячеек. Пользовательские хранилища данных мини-пакетов должны выводить таблицы.

Выходные данные хранилища данныхПример вывода
Стол
data = read(ds)
data =

  4×2 table

        Predictors        Response
    __________________    ________

    {12×50 double}           2    
    {12×50 double}           7    
    {12×50 double}           9    
    {12×50 double}           9  
Массив ячеек
data = read(ds)
data =

  4×2 cell array

    {12×50 double}        {[2]}
    {12×50 double}        {[7]}
    {12×50 double}        {[9]}
    {12×50 double}        {[9]}

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

ДанныеФормат предикторов
Векторная последовательность

матрица c-by-s, где c - число признаков последовательности, а s - длина последовательности.

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

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

Каждая последовательность в мини-партии должна иметь одинаковую длину.

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

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

Каждая последовательность в мини-партии должна иметь одинаковую длину.

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

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

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

Скаляр

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

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

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

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

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

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

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

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

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

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

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

ВходОписание
Векторные последовательностиматрицы c-by-s, где c - число признаков последовательностей, а s - длина последовательности.
2-D последовательности изображениймассивы h-by-w-by-s, где h, w и c соответствуют высоте, ширине и количеству каналов изображений, соответственно, и s - длина последовательности.
3-D последовательности изображенийh-by-w-d-by-c-by-s, где h, w, d и c соответствуют высоте, ширине, глубине и количеству каналов 3-D изображений, соответственно, и s - длина последовательности.

Совет

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

Совет

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

Данные элемента, указанные как одно из следующих значений:

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

  • Сеть поездов с несколькими входами.

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

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

CombinedDatastoreХранилище данных, считывающее данные из двух или более базовых хранилищ данных.

  • Сеть поездов с несколькими входами.

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

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

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

Дополнительные сведения см. в разделе Разработка собственного мини-хранилища пакетных данных.

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

Хранилище данных

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

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

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

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

Хранилище данных должно возвращать данные в таблице или массиве ячеек. Пользовательские хранилища данных мини-пакетов должны выводить таблицы. Формат выходных данных хранилища данных зависит от архитектуры сети.

Сетевая архитектураВыходные данные хранилища данныхПример вывода
Один входной слой

Таблица или массив ячеек с двумя столбцами.

Первый и второй столбцы определяют предикторы и ответы соответственно.

Элементы таблицы должны быть скалярами, векторами строк или массивами ячеек 1 на 1, содержащими числовой массив.

Пользовательские хранилища данных мини-пакетов должны выводить таблицы.

Таблица для сети с одним входом и одним выходом:

data = read(ds)
data =

  4×2 table

        Predictors        Response
    __________________    ________

    {24×1 double}            2    
    {24×1 double}            7    
    {24×1 double}            9    
    {24×1 double}            9  

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

data = read(ds)
data =

  4×2 cell array

    {24×1 double}    {[2]}
    {24×1 double}    {[7]}
    {24×1 double}    {[9]}
    {24×1 double}    {[9]}

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

Массив ячеек с (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 должна быть категориальной последовательностью меток.

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

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

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

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

Регрессия элемента

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

Регрессия «последовательность к одному»Матрица N-по-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 в командной строке. Например:

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] Кудо, М., Дж. Тояма и М. Симбо. «Многомерная классификация кривых с использованием сквозных областей». Буквы распознавания образов. т. 20, № 11-13, стр. 1103-1111.

[2] Кудо, М., Дж. Тояма и М. Симбо. Набор данных гласных на японском языке. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels

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

Представлен в R2016a