Сеть глубокого обучения для пользовательских циклов обучения
A dlnetwork объект обеспечивает поддержку пользовательских циклов обучения с помощью автоматического дифференцирования.
Совет
Для выполнения большинства задач глубокого обучения можно использовать предварительно подготовленную сеть и адаптировать ее к собственным данным. Пример, показывающий, как использовать transfer learning для переподготовки сверточной нейронной сети для классификации нового набора изображений, см. в разделе Train Deep Learning Network to Classify New Images. Кроме того, можно создавать и обучать сети с нуля с помощью layerGraph объекты с trainNetwork и trainingOptions функции.
Если trainingOptions функция не предоставляет возможности обучения, необходимые для выполнения задачи, после чего можно создать индивидуальный цикл обучения с помощью автоматического дифференцирования. Дополнительные сведения см. в разделе Определение сети глубокого обучения для пользовательских циклов обучения.
преобразует сетевые уровни, указанные в dlnet = dlnetwork(layers)layers в инициализированный dlnetwork объект, представляющий собой глубокую нейронную сеть для использования с пользовательскими обучающими циклами. layers может быть LayerGraph объект или Layer массив. layers должен содержать входной слой.
Инициализированный dlnetwork объект готов к обучению. Обучаемые параметры и значения состояний dlnet инициализируются для обучения с начальными значениями на основе размера ввода, определенного сетевым уровнем ввода.
создает инициализированный dlnet = dlnetwork(layers,dlX1,...,dlXn)dlnetwork объект с использованием входных данных примера dlX1,...,dlXn. Обучаемые параметры и значения состояний dlnet инициализируются начальными значениями на основе размера и формата входных данных, определенных входными данными примера. Используйте этот синтаксис для создания инициализированного dlnetwork с входами, которые не подключены к входному слою.
указывает, следует ли возвращать инициализированный или неинициализированный dlnet = dlnetwork(layers,'Initialize',tf)dlnetwork. Этот синтаксис используется для создания неинициализированной сети.
Неинициализированная сеть имеет неснятые, пустые значения для обучаемых параметров и параметров состояния и не готова к обучению. Необходимо инициализировать неинициализированный dlnetwork прежде чем использовать его. Создайте неинициализированную сеть, если требуется отложить инициализацию до более поздней точки. Можно использовать неинициализированные dlnetwork объекты для создания сложных сетей с использованием промежуточных компоновочных блоков, которые затем соединяются друг с другом, например, с помощью рабочих процессов композиции сети Deep Learning Network. Можно инициализировать неинициализированный dlnetwork с использованием initialize функция.
layers - Сетевые уровниLayerGraph объект | Layer множествоСетевые уровни, указанные как LayerGraph объект или как Layer массив.
Если layers является Layer массив, затем dlnetwork функция соединяет слои последовательно.
Сетевые уровни не должны содержать выходные уровни. При обучении сети рассчитайте потери отдельно.
Список слоев, поддерживаемых dlnetwork, см. Поддерживаемые слои.
dlX1,...,dlXn - Пример сетевых входовdlarrayПример сетевых входов, указанных как отформатированные dlarray объекты. Программное обеспечение распространяет входные данные примера через сеть для определения соответствующих размеров и форматов обучаемых параметров и параметров состояния dlnetwork.
Входные данные примера должны быть отформатированы dlarray объекты. Когда layers является Layer массив, предоставьте примеры входных данных в том же порядке, в котором слои, которым требуются входные данные, отображаются в Layer массив. Когда layers является LayerGraph , предоставьте примеры входных данных в том же порядке, что и слои, для которых требуются входные данные, отображаемые в Layers имущества LayerGraph.
Примеры входных данных не поддерживаются, если tf имеет значение false.
tf - Флаг для возврата инициализирован dlnetworktrue или 1 (по умолчанию) | false или 0Флаг для возврата инициализирован dlnetwork, указано как числовое или логическое 1 (true) или 0 (false).
Если tf является true или 1, обучаемые и параметры состояния dlnet инициализируются начальными значениями для обучения в соответствии с уровнем сетевого ввода или предоставленными примерами входных данных.
Если tf имеет значение false, обучаемые параметры и параметры состояния не инициализируются. Перед использованием неинициализированной сети необходимо сначала инициализировать ее с помощью initialize функция. Примеры входных данных не поддерживаются, если tf имеет значение false.
Layers - Сетевые уровниLayer множествоСетевые уровни, указанные как Layer массив.
Connections - Соединения слоевСоединения слоев, указанные как таблица с двумя столбцами.
Каждая строка таблицы представляет соединение в графе слоев. Первый столбец, Source, указывает источник каждого соединения. Второй столбец, Destination, указывает место назначения каждого подключения. Источники и адресаты соединений являются либо именами слоев, либо имеют форму 'layerName/IOName', где 'IOName' - имя входного или выходного слоя.
Типы данных: table
Learnables - Сетевые обучаемые параметрыСетевые обучаемые параметры, заданные в виде таблицы с тремя столбцами:
Layer - имя слоя, указанное как строковый скаляр.
Parameter - имя параметра, указанное как строковый скаляр.
Value - значение параметра, указанного как dlarray объект.
Сетевые обучаемые параметры содержат функции, полученные сетью. Например, веса свёртки и полностью соединенных слоев.
Типы данных: table
State - Состояние сетиСостояние сети, указанное как таблица.
Состояние сети представляет собой таблицу с тремя столбцами:
Layer - имя слоя, указанное как строковый скаляр.
Parameter - имя параметра, указанное как строковый скаляр.
Value - значение параметра, указанного как dlarray объект.
Состояние сети содержит информацию, запомненную сетью между итерациями. Например, состояние уровней LSTM и пакетной нормализации.
Во время обучения или вывода можно обновить состояние сети с помощью выходных данных forward и predict функции.
Типы данных: table
InputNames - Имена сетевых входных уровнейИмена сетевых входных уровней, заданные как массив ячеек символьных векторов.
Типы данных: cell
OutputNames - Имена сетевых выходных уровнейИмена сетевых выходных уровней, заданные как массив ячеек символьных векторов. Это свойство включает все слои с отключенными выходами. Если уровень имеет несколько выходов, то отсоединенные выходы задаются как 'layerName/outputName'.
Типы данных: cell
Initialized - Флаг для инициализированной сети 0 | 1Это свойство доступно только для чтения.
Флаг для инициализированной сети, указанный как 0 или 1.
Если Initialized является 0, сеть не инициализирована. Перед использованием сети необходимо инициализировать ее. Инициализировать сеть с помощью initialize функция.
Если Initialized является 1, сеть инициализируется и может использоваться для обучения и вывода. При изменении значений обучаемых параметров - например, во время обучения - значение Initialized остается 1.
Типы данных: logical
forward | Вычислить выходные данные сети глубокого обучения для обучения |
predict | Вычислить выходные данные сети глубокого обучения для вывода |
initialize | Инициализация обучаемых параметров и параметров состояния dlnetwork |
layerGraph | График сетевых уровней для глубокого обучения |
setL2Factor | Набор фактор регуляризации L2 слоя learnable параметр |
setLearnRateFactor | Установка коэффициента скорости обучения обучаемого параметра уровня |
getLearnRateFactor | Получить коэффициент скорости обучения обучаемого параметра уровня |
getL2Factor | Получите фактор регуляризации L2 слоя learnable параметр |
dlnetwork ОбъектЧтобы внедрить индивидуальный цикл обучения для сети, сначала преобразуйте его в dlnetwork объект. Не включать выходные слои в dlnetwork объект. Вместо этого необходимо указать функцию потери в пользовательском цикле обучения.
Загрузка предварительно подготовленной модели GoogLeNet с помощью googlenet функция. Для этой функции требуется модель Deep Learning Toolbox™ для пакета поддержки сети GoogLeNet. Если этот пакет поддержки не установлен, функция предоставляет ссылку для загрузки.
net = googlenet;
Преобразование сети в график слоев и удаление слоев, используемых для классификации с помощью removeLayers.
lgraph = layerGraph(net); lgraph = removeLayers(lgraph,["prob" "output"]);
Преобразование сети в dlnetwork объект.
dlnet = dlnetwork(lgraph)
dlnet =
dlnetwork with properties:
Layers: [142x1 nnet.cnn.layer.Layer]
Connections: [168x2 table]
Learnables: [116x3 table]
State: [0x3 table]
InputNames: {'data'}
OutputNames: {'loss3-classifier'}
Initialized: 1
dlnetwork с неподключенными входамиПример входных данных для создания нескольких входных данных dlnetwork который готов к тренировкам. Программное обеспечение распространяет входные данные примера через сеть для определения соответствующих размеров и форматов обучаемых параметров и параметров состояния dlnetwork.
Определите архитектуру сети. Создайте сеть с двумя ветвями. Сеть принимает два входа, по одному входу на ветвь. Соедините ветви с помощью слоя сложения.
numFilters = 24;
layersBranch1 = [
convolution2dLayer(3,6*numFilters,'Padding','same','Stride',2,'Name','conv1Branch1')
groupNormalizationLayer('all-channels','Name','gn1Branch1')
reluLayer('Name','relu1Branch1')
convolution2dLayer(3,numFilters,'Padding','same','Name','conv2Branch1')
groupNormalizationLayer('channel-wise','Name','gn2Branch1')
additionLayer(2,'Name','add')
reluLayer('Name','reluCombined')
fullyConnectedLayer(10,'Name','fc')
softmaxLayer('Name','sm')];
layersBranch2 = [
convolution2dLayer(1,numFilters,'Name','convBranch2')
groupNormalizationLayer('all-channels','Name','gnBranch2')];
lgraph = layerGraph(layersBranch1);
lgraph = addLayers(lgraph,layersBranch2);
lgraph = connectLayers(lgraph,'gnBranch2','add/in2'); Создайте пример сетевых входов того же формата, что и обычные сетевые входы. Для обоих входных данных используйте размер пакета 32. Используйте вход размером 64 на 64 с тремя каналами для входа в слой convBranch1. Используйте вход размером 64 на 64 с 18 каналами для входа в слой convBranch2.
dlX1 = dlarray(rand([64 64 3 32]),"SSCB"); dlX2 = dlarray(rand([32 32 18 32]),"SSCB");
Создать dlnetwork. Предоставьте входные данные в том же порядке, в котором отображаются несвязанные слои Layers имущество lgraph.
dlnet = dlnetwork(lgraph,dlX1,dlX2);
Проверьте, что сеть инициализирована и готова к обучению.
dlnet.Initialized
ans = 1
В этом примере показано, как обучить сеть, которая классифицирует рукописные цифры с помощью пользовательского графика обучения.
Если trainingOptions не предоставляет необходимых опций (например, пользовательский график обучения), то можно определить собственный пользовательский цикл обучения с помощью автоматического дифференцирования.
Этот пример обучает сеть классифицировать рукописные цифры по расписанию скорости обучения затуханию, основанному на времени: для каждой итерации решатель использует скорость обучения, заданную, где t - итераций, α0 - начальная скорость обучения, а k - затухание.
Загрузка данных обучения
Загрузите данные цифр как хранилище данных изображения с помощью imageDatastore и укажите папку, содержащую данные изображения.
dataFolder = fullfile(toolboxdir('nnet'),'nndemos','nndatasets','DigitDataset'); imds = imageDatastore(dataFolder, ... 'IncludeSubfolders',true, .... 'LabelSource','foldernames');
Разбейте данные на обучающие и проверочные наборы. Отложите 10% данных для проверки с помощью splitEachLabel функция.
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.9,'randomize');Сеть, используемая в этом примере, требует входных изображений размера 28 на 28 на 1. Для автоматического изменения размеров учебных изображений используйте хранилище данных дополненного изображения. Укажите дополнительные операции увеличения, выполняемые на обучающих изображениях: случайное перемещение изображений до 5 пикселей в горизонтальной и вертикальной осях. Увеличение объема данных помогает предотвратить переоборудование сети и запоминание точных деталей обучающих изображений.
inputSize = [28 28 1]; pixelRange = [-5 5]; imageAugmenter = imageDataAugmenter( ... 'RandXTranslation',pixelRange, ... 'RandYTranslation',pixelRange); augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain,'DataAugmentation',imageAugmenter);
Чтобы автоматически изменять размер изображений проверки без дальнейшего увеличения данных, используйте хранилище данных дополненного изображения без указания дополнительных операций предварительной обработки.
augimdsValidation = augmentedImageDatastore(inputSize(1:2),imdsValidation);
Определите количество занятий в данных обучения.
classes = categories(imdsTrain.Labels); numClasses = numel(classes);
Определение сети
Определите сеть для классификации изображений.
layers = [
imageInputLayer(inputSize,'Normalization','none','Name','input')
convolution2dLayer(5,20,'Name','conv1')
batchNormalizationLayer('Name','bn1')
reluLayer('Name','relu1')
convolution2dLayer(3,20,'Padding','same','Name','conv2')
batchNormalizationLayer('Name','bn2')
reluLayer('Name','relu2')
convolution2dLayer(3,20,'Padding','same','Name','conv3')
batchNormalizationLayer('Name','bn3')
reluLayer('Name','relu3')
fullyConnectedLayer(numClasses,'Name','fc')
softmaxLayer('Name','softmax')];
lgraph = layerGraph(layers);Создать dlnetwork объект из графа слоев.
dlnet = dlnetwork(lgraph)
dlnet =
dlnetwork with properties:
Layers: [12×1 nnet.cnn.layer.Layer]
Connections: [11×2 table]
Learnables: [14×3 table]
State: [6×3 table]
InputNames: {'input'}
OutputNames: {'softmax'}
Определение функции градиентов модели
Создание функции modelGradients, перечисленных в конце примера, который принимает dlnetwork объект, мини-пакет входных данных с соответствующими метками и возвращает градиенты потерь относительно обучаемых параметров в сети и соответствующих потерь.
Укажите параметры обучения
Поезд на десять эпох с размером мини-партии 128.
numEpochs = 10; miniBatchSize = 128;
Укажите параметры оптимизации SGDM. Укажите начальную скорость обучения 0,01 с распадом 0,01, а импульс 0,9.
initialLearnRate = 0.01; decay = 0.01; momentum = 0.9;
Модель поезда
Создать minibatchqueue объект, обрабатывающий и управляющий мини-партиями изображений во время обучения. Для каждой мини-партии:
Использование пользовательской функции предварительной обработки мини-партии preprocessMiniBatch (определяется в конце этого примера) для преобразования меток в однокодированные переменные.
Форматирование данных изображения с метками размеров 'SSCB' (пространственный, пространственный, канальный, пакетный). По умолчанию minibatchqueue объект преобразует данные в dlarray объекты с базовым типом single. Не добавляйте формат к меткам класса.
Обучение на GPU, если он доступен. По умолчанию minibatchqueue объект преобразует каждый вывод в gpuArray если графический процессор доступен. Для использования графического процессора требуется Toolbox™ параллельных вычислений и поддерживаемое устройство графического процессора. Сведения о поддерживаемых устройствах см. в разделе Поддержка графического процессора по выпуску (Parallel Computing Toolbox).
mbq = minibatchqueue(augimdsTrain,... 'MiniBatchSize',miniBatchSize,... 'MiniBatchFcn',@preprocessMiniBatch,... 'MiniBatchFormat',{'SSCB',''});
Инициализируйте график хода обучения.
figure lineLossTrain = animatedline('Color',[0.85 0.325 0.098]); ylim([0 inf]) xlabel("Iteration") ylabel("Loss") grid on
Инициализируйте параметр скорости для решателя SGDM.
velocity = [];
Обучение сети с использованием пользовательского цикла обучения. Для каждой эпохи тасуйте данные и закольцовывайте мини-пакеты данных. Для каждой мини-партии:
Оцените градиенты модели, состояние и потери с помощью dlfeval и modelGradients и обновить состояние сети.
Определите скорость обучения для графика скорости обучения с учетом времени.
Обновление параметров сети с помощью sgdmupdate функция.
Просмотрите ход обучения.
iteration = 0; start = tic; % Loop over epochs. for epoch = 1:numEpochs % Shuffle data. shuffle(mbq); % Loop over mini-batches. while hasdata(mbq) iteration = iteration + 1; % Read mini-batch of data. [dlX, dlY] = next(mbq); % Evaluate the model gradients, state, and loss using dlfeval and the % modelGradients function and update the network state. [gradients,state,loss] = dlfeval(@modelGradients,dlnet,dlX,dlY); dlnet.State = state; % Determine learning rate for time-based decay learning rate schedule. learnRate = initialLearnRate/(1 + decay*iteration); % Update the network parameters using the SGDM optimizer. [dlnet,velocity] = sgdmupdate(dlnet,gradients,velocity,learnRate,momentum); % Display the training progress. D = duration(0,0,toc(start),'Format','hh:mm:ss'); addpoints(lineLossTrain,iteration,loss) title("Epoch: " + epoch + ", Elapsed: " + string(D)) drawnow end end

Тестовая модель
Проверьте точность классификации модели путем сравнения прогнозов на наборе проверки с истинными метками.
После обучения составление прогнозов по новым данным не требует меток. Создать minibatchqueue объект, содержащий только предикторы тестовых данных:
Чтобы игнорировать метки для тестирования, установите число выходов мини-пакетной очереди равным 1.
Укажите размер мини-партии, используемый для обучения.
Предварительная обработка предикторов с помощью preprocessMiniBatchPredictors функция, перечисленная в конце примера.
Для одиночного вывода хранилища данных укажите формат мини-пакета. 'SSCB' (пространственный, пространственный, канальный, пакетный).
numOutputs = 1; mbqTest = minibatchqueue(augimdsValidation,numOutputs, ... 'MiniBatchSize',miniBatchSize, ... 'MiniBatchFcn',@preprocessMiniBatchPredictors, ... 'MiniBatchFormat','SSCB');
Закольцовывать мини-пакеты и классифицировать изображения с помощью modelPredictions функция, перечисленная в конце примера.
predictions = modelPredictions(dlnet,mbqTest,classes);
Оцените точность классификации.
YTest = imdsValidation.Labels; accuracy = mean(predictions == YTest)
accuracy = 0.9530
Функция градиентов модели
modelGradients функция принимает dlnetwork объект dlnet, мини-пакет входных данных dlX с соответствующими метками Y и возвращает градиенты потерь относительно обучаемых параметров в dlnet, состояние сети и потери. Для автоматического вычисления градиентов используйте dlgradient функция.
function [gradients,state,loss] = modelGradients(dlnet,dlX,Y) [dlYPred,state] = forward(dlnet,dlX); loss = crossentropy(dlYPred,Y); gradients = dlgradient(loss,dlnet.Learnables); loss = double(gather(extractdata(loss))); end
Функция прогнозирования модели
modelPredictions функция принимает dlnetwork объект dlnet, a minibatchqueue входных данных mbqи сетевые классы, и вычисляет предсказания модели путем итерации по всем данным в minibatchqueue объект. Функция использует onehotdecode функция для поиска прогнозируемого класса с наивысшим баллом.
function predictions = modelPredictions(dlnet,mbq,classes) predictions = []; while hasdata(mbq) dlXTest = next(mbq); dlYPred = predict(dlnet,dlXTest); YPred = onehotdecode(dlYPred,classes,1)'; predictions = [predictions; YPred]; end end
Функция предварительной обработки мини-партий
preprocessMiniBatch функция предварительно обрабатывает мини-пакет предикторов и меток, используя следующие шаги:
Предварительная обработка изображений с помощью preprocessMiniBatchPredictors функция.
Извлеките данные метки из входящего массива ячеек и объедините их в категориальный массив вдоль второго измерения.
Одноконтурное кодирование категориальных меток в числовые массивы. Кодирование в первом измерении создает закодированный массив, который соответствует форме сетевого вывода.
function [X,Y] = preprocessMiniBatch(XCell,YCell) % Preprocess predictors. X = preprocessMiniBatchPredictors(XCell); % Extract label data from cell and concatenate. Y = cat(2,YCell{1:end}); % One-hot encode labels. Y = onehotencode(Y,1); end
Функция предварительной обработки мини-пакетных предикторов
preprocessMiniBatchPredictors функция предварительно обрабатывает мини-пакет предикторов путем извлечения данных изображения из массива входных ячеек и конкатенации в числовой массив. Для ввода в оттенках серого при конкатенации над четвертым размером к каждому изображению добавляется третий размер для использования в качестве размера одиночного канала.
function X = preprocessMiniBatchPredictors(XCell) % Concatenate. X = cat(4,XCell{1:end}); end
dlnetwork ОбъектЗагрузите предварительно обученную сеть.
net = squeezenet;
Преобразование сети в график слоев, удаление выходного слоя и его преобразование в dlnetwork объект.
lgraph = layerGraph(net);
lgraph = removeLayers(lgraph,'ClassificationLayer_predictions');
dlnet = dlnetwork(lgraph); Learnables имущества dlnetwork - это таблица, содержащая обучаемые параметры сети. Таблица содержит параметры вложенных слоев в отдельных строках. Просмотрите первые несколько строк таблицы обучаемых элементов.
learnables = dlnet.Learnables; head(learnables)
ans=8×3 table
Layer Parameter Value
__________________ _________ ___________________
"conv1" "Weights" {3x3x3x64 dlarray}
"conv1" "Bias" {1x1x64 dlarray}
"fire2-squeeze1x1" "Weights" {1x1x64x16 dlarray}
"fire2-squeeze1x1" "Bias" {1x1x16 dlarray}
"fire2-expand1x1" "Weights" {1x1x16x64 dlarray}
"fire2-expand1x1" "Bias" {1x1x64 dlarray}
"fire2-expand3x3" "Weights" {3x3x16x64 dlarray}
"fire2-expand3x3" "Bias" {1x1x64 dlarray}
Чтобы зафиксировать обучаемые параметры сети, закольцовывайте обучаемые параметры и установите скорость обучения равной 0 с помощью setLearnRateFactor функция.
factor = 0; numLearnables = size(learnables,1); for i = 1:numLearnables layerName = learnables.Layer(i); parameterName = learnables.Parameter(i); dlnet = setLearnRateFactor(dlnet,layerName,parameterName,factor); end
Чтобы использовать обновленные коэффициенты скорости обучения при обучении, необходимо передать объект dlnetwork функции обновления в индивидуальном цикле обучения. Например, используйте команду
[dlnet,velocity] = sgdmupdate(dlnet,gradients,velocity);
dlnetworkСоздание неинициализированного dlnetwork объект без входного слоя. Создание неинициализированного dlnetwork полезен, когда вы еще не знаете размер и формат сетевых входов, например, когда dlnetwork вложен в пользовательский слой.
Определите сетевые уровни. Эта сеть имеет один вход, который не подключен к входному уровню.
layers = [convolution2dLayer(5,20,'Name','conv') batchNormalizationLayer('Name','bn') reluLayer('Name','relu') fullyConnectedLayer(10,'Name','fc') softmaxLayer('Name','sm')];
Создание неинициализированного dlnetwork. Установите Initialize параметр name-value имеет значение false.
dlnet = dlnetwork(layers,'Initialize',false);Убедитесь, что сеть не инициализирована.
dlnet.Initialized
ans = 0
Обучаемые параметры и параметры состояния этой сети не инициализируются для обучения. Для инициализации сети используйте initialize функция.
Если вы хотите использовать dlnet непосредственно в индивидуальном цикле обучения, затем его можно инициализировать с помощью initialize и предоставление примера ввода.
Если вы хотите использовать dlnet внутри пользовательского слоя можно воспользоваться преимуществами автоматической инициализации. При использовании пользовательского слоя внутри dlnetwork, dlnet инициализируется, когда родительский элемент dlnetwork создается (или когда родительская сеть инициализируется, если она построена как неинициализированная dlnetwork). При использовании пользовательского слоя внутри сети, обучаемой с помощью trainNetwork функция, затем dlnet автоматически инициализируется во время обучения. Дополнительные сведения см. в разделе Состав сети глубокого обучения.
dlnetwork поддерживает перечисленные ниже слои и пользовательские слои без функции пересылки, возвращающей непустое значение памяти.
| Слой | Описание |
|---|---|
| Уровень ввода изображения вводит 2-D изображения в сеть и применяет нормализацию данных. | |
| Входной слой 3-D изображения вводит 3-D изображения или объемы в сеть и применяет нормализацию данных. | |
| Входной уровень последовательности вводит данные последовательности в сеть. | |
| Входной уровень элемента вводит данные элемента в сеть и применяет нормализацию данных. Этот слой используется при наличии набора числовых скаляров, представляющих элементы (данные без пространственных или временных измерений). |
| Слой | Описание |
|---|---|
| 2-D сверточный слой применяет скользящие сверточные фильтры к входу. | |
| 3-D сверточный слой применяет скользящие кубические сверточные фильтры к трехмерному входу. | |
| 2-D сгруппированный сверточный слой разделяет входные каналы на группы и применяет скользящие сверточные фильтры. Используйте сгруппированные сверточные слои для разделяемых по каналам (также называемых разделяемыми по глубине) сверток. | |
| Транспонированный слой свертки 2-D увеличивает выборку карт элементов. | |
| Транспонированный 3-D сверточный слой увеличивает трехмерные карты признаков. | |
| Полностью связанный слой умножает входной сигнал на весовую матрицу и затем добавляет вектор смещения. |
| Слой | Описание |
|---|---|
| Входной уровень последовательности вводит данные последовательности в сеть. | |
| Уровень LSTM распознает долгосрочные зависимости между временными шагами во временных рядах и данными последовательности. | |
| Уровень двунаправленного LSTM (BiLSTM) изучает двунаправленные долгосрочные зависимости между временными шагами временных рядов или данных последовательности. Эти зависимости могут быть полезны, если необходимо, чтобы сеть извлекала уроки из полного временного ряда на каждом временном шаге. | |
| Уровень GRU распознает зависимости между временными шагами во временных рядах и данными последовательности. |
Для lstmLayer, bilstmLayer, и gruLayer объекты, dlnetwork объекты поддерживают слои со значениями по умолчанию для StateActivationFunction и GateActivationFunction свойства.
| Слой | Описание |
|---|---|
| Уровень ReLU выполняет пороговую операцию для каждого элемента входа, где любое значение меньше нуля устанавливается равным нулю. | |
| Уровень ReLU с утечкой выполняет пороговую операцию, где любое входное значение, меньшее нуля, умножается на фиксированный скаляр. | |
| Подрезанный слой ReLU выполняет пороговую операцию, при которой любое входное значение меньше нуля устанавливается равным нулю, а любое значение выше подрезанного потолка устанавливается на этот подрезанный потолок. | |
| Уровень активации ЗЭС выполняет операцию идентификации на положительных входах и экспоненциальную нелинейность на отрицательных входах. | |
| Слой активации swish применяет функцию swish на входах слоев. | |
| Слой активации гиперболической касательной (tanh) применяет функцию tanh на входах слоя. | |
| Уровень softmax применяет функцию softmax к входу. |
| Слой | Описание |
|---|---|
| Уровень пакетной нормализации нормализует мини-пакет данных по всем наблюдениям для каждого канала независимо. Чтобы ускорить обучение сверточной нейронной сети и снизить чувствительность к инициализации сети, используйте уровни пакетной нормализации между сверточными слоями и нелинейностями, такими как уровни ReLU. | |
| Уровень нормализации группы нормализует мини-пакет данных по сгруппированным подмножествам каналов для каждого наблюдения независимо. Чтобы ускорить обучение сверточной нейронной сети и снизить чувствительность к инициализации сети, используйте уровни групповой нормализации между сверточными слоями и нелинейностями, такими как уровни ReLU. | |
| Уровень нормализации уровня нормализует мини-пакет данных по всем каналам для каждого наблюдения независимо. Чтобы ускорить обучение повторяющихся и многослойных перцептронных нейронных сетей и снизить чувствительность к инициализации сети, используйте уровни нормализации уровня после обучаемых уровней, таких как LSTM и полностью соединенных уровней. | |
| Канальный уровень локальной (кросс-канальной) нормализации выполняет канальную нормализацию. | |
| Уровень отсева случайным образом устанавливает входные элементы в ноль с заданной вероятностью. | |
| Слой подрезки 2-D применяется 2-D обрезки к вводу. |
| Слой | Описание |
|---|---|
| Средний уровень объединения выполняет понижающую дискретизацию путем разделения входных данных на прямоугольные области объединения и вычисления средних значений каждой области. | |
| Уровень 3-D среднего объединения выполняет понижающую дискретизацию путем разделения трехмерного ввода на области кубического объединения и вычисления средних значений каждой области. | |
| Уровень глобального среднего объединения выполняет понижающую дискретизацию путем вычисления среднего значения высоты и ширины входного сигнала. | |
| 3-D уровень глобального среднего объединения выполняет понижающую дискретизацию путем вычисления среднего значения высоты, ширины и глубины входного сигнала. | |
| Уровень максимального объединения выполняет понижающую дискретизацию путем разделения входных данных на прямоугольные области объединения и вычисления максимума каждой области. | |
| Уровень объединения 3-D max выполняет понижающую дискретизацию путем разделения трехмерного ввода на области кубоидального объединения и вычисления максимума каждой области. | |
| Уровень глобального максимального пула выполняет понижающую дискретизацию путем вычисления максимума высоты и ширины входного сигнала. | |
| 3-D уровень глобального максимального объединения выполняет понижающую дискретизацию путем вычисления максимума высоты, ширины и глубины входного сигнала. | |
| Уровень макс. расхолаживания распаковывает выходные данные уровня макс. пула. |
| Слой | Описание |
|---|---|
| Уровень сложения добавляет входные данные от нескольких уровней нейронной сети по элементам. | |
| Уровень умножения умножает входы от нескольких нейронных сетевых уровней по элементам. | |
| Слой конкатенации глубины принимает входные данные одинаковой высоты и ширины и объединяет их вдоль третьего размера (размера канала). | |
| Слой конкатенации принимает входные данные и выполняет их конкатенацию вдоль заданного размера. Входные данные должны иметь одинаковый размер во всех размерах, кроме размера конкатенации. |
dlnetwork значения состояния dlarray объекты State из dlnetwork объект - это таблица, содержащая имена параметров состояния и значения для каждого уровня в сети.
Начиная с R2021a, значения состояния: dlarray объекты. Это изменение обеспечивает лучшую поддержку при использовании AcceleratedFunction объекты. Для ускорения функций глубокого обучения, которые часто меняют входные значения, например, входные данные, содержащие состояние сети, часто меняющиеся значения должны быть указаны как dlarray объекты.
В предыдущих версиях значения состояния представляют собой числовые массивы.
В большинстве случаев обновление кода не требуется. Если у вас есть код, который требует, чтобы значения состояния были числовыми массивами, то для воспроизведения предыдущего поведения извлеките данные из значений состояния вручную с помощью extractdata функции с помощью dlupdate функция.
state = dlupdate(@extractdata,dlnet.State);
Примечания и ограничения по использованию:
Генерация кода поддерживает только InputNames и OutputNames свойства.
Создание кода не поддерживает dlnetwork объекты без входных слоев. Initialized имущества dlnetwork объект должен иметь значение true.
Создание кода для dlnetwork объекты с sequenceInputLayer объекты не поддерживаются.
Генерация кода поддерживает только predict объектная функция. dlarray входные данные для predict метод должен быть single тип данных.
Создание кода не поддерживает dlnetwork для простой цели C/C + +.
Генерация кода поддерживает MIMO dlnetworks.
Создание dlnetwork для создания кода см. раздел Загрузка предварительно подготовленных сетей для создания кода (кодер MATLAB).
Примечания и ограничения по использованию:
Генерация кода поддерживает только InputNames и OutputNames свойства.
Создание кода не поддерживает dlnetwork объекты без входных слоев. Initialized имущества dlnetwork объект должен иметь значение true.
Создание кода для dlnetwork объекты с sequenceInputLayer объекты не поддерживаются.
Генерация кода поддерживает только predict объектная функция. dlarray входные данные для predict метод должен быть single тип данных.
Поддержка генерации кода dlnetwork для целей cuDNN и TensorRT. Создание кода не поддерживает dlnetwork для целей ARM ® Mali и простых C/C + +.
При целеуказании TensorRT с INT8 точность, последние уровни сети должны быть softmaxLayer слой.
Генерация кода поддерживает MIMO dlnetworks.
Создание dlnetwork для создания кода см. раздел Загрузка предварительно подготовленных сетей для создания кода (кодер GPU).
dlarray | dlfeval | dlgradient | forward | initialize | layerGraph | predict
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.