Нейронная сеть для глубокого обучения для пользовательских циклов обучения
A dlnetwork
объект включает поддержку пользовательских циклов обучения с помощью автоматической дифференциации.
Совет
Для большинства задач глубокого обучения можно использовать предварительно обученную сеть и адаптировать ее к собственным данным. Для примера, показывающего, как использовать передачу обучения для переобучения сверточной нейронной сети для классификации нового набора изображений, смотрите Train Нейронной сети для глубокого обучения для классификации новых изображений. Также можно создавать и обучать сети с нуля, используя 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
. Используйте этот синтаксис для создания неинициализированной сети.
Неинициализированная сеть имеет неактивные, пустые значения для параметров learnable и state и не готова к обучению. Необходимо инициализировать неинициализированную dlnetwork
прежде чем вы сможете использовать его. Создайте неинициализированную сеть, когда вы хотите отложить инициализацию до более поздней точки. Можно использовать неинициализированные dlnetwork
объекты для создания сложных сетей с помощью промежуточных базовых блоков, которые затем соединяются вместе, например, с помощью рабочих процессов Нейронной Сети для Глубокого Обучения Composition. Можно инициализировать неинициализированную dlnetwork
использование initialize
функция.
layers
- Слои сетиLayerGraph
| объекта Layer
массивСлои сети, заданные как LayerGraph
объект или как Layer
массив.
Если layers
является Layer
массив, затем dlnetwork
функция соединяет слои последовательно.
Слои сети не должны содержать выходные слои. При обучении сети вычислите потери отдельно.
Список слоев, поддерживаемых dlnetwork
, см. «Поддерживаемые слои».
dlX1,...,dlXn
- Пример входов сетиdlarray
Пример входов сети, заданный как форматированный dlarray
объекты. Программное обеспечение распространяет входные входы примера через сеть, чтобы определить соответствующие размеры и форматы обучаемых и параметров состояния dlnetwork
.
Входы примера должны быть отформатированы dlarray
объекты. Когда layers
является Layer
array, предоставьте примеры входов в том же порядке, в котором слои, которые требуют входов, появляются в Layer
массив. Когда layers
является LayerGraph
object, предоставить примеры входов в том же порядке, в котором слои, которые требуют входов, появляются в Layers
свойство LayerGraph
.
Входы примера не поддерживаются при tf
является ложным.
tf
- Флаг для возврата инициализированных dlnetwork
true
или 1
(по умолчанию) | false
или 0
Флаг для возврата инициализированных dlnetwork
, заданный как число или логическое 1
(true
) или 0
(false
).
Если tf
является true
или 1
, обучаемые и параметры состояния dlnet
инициализируются начальными значениями для обучения в соответствии с входным слоем сети или предоставленными входными входами примера.
Если tf
false, learnable и параметры состояния не инициализированы. Прежде чем вы используете неинициализированную сеть, необходимо сначала инициализировать ее с помощью initialize
функция. Входы примера не поддерживаются при tf
является ложным.
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 слоя настраиваемого параметра |
setLearnRateFactor | Установите коэффициент скорости обучения слоя настраиваемого параметра |
getLearnRateFactor | Получите коэффициент скорости обучения слоя настраиваемого параметра |
getL2Factor | Коэффициент регуляризации L2 слоя настраиваемого параметра |
dlnetwork
ОбъектЭтот пример использует:
Чтобы реализовать пользовательский цикл обучения для вашей сети, сначала преобразуйте его в dlnetwork
объект. Не включать выходные слои в dlnetwork
объект. Вместо этого необходимо задать функцию потерь в пользовательском цикле обучения.
Загрузите предварительно обученную модель GoogLeNet с помощью googlenet
функция. Этой функции требуется Модель Deep Learning Toolbox™ для пакета поддержки GoogLeNet Network. Если этот пакет поддержки не установлен, то функция предоставляет ссылку на загрузку.
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 - число итерации, является начальной скоростью обучения, и k является распадом.
Загрузка обучающих данных
Загрузите данные цифр в виде datastore изображений с помощью 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. Чтобы автоматически изменить размер обучающих изображений, используйте дополненный image datastore. Задайте дополнительные операции увеличения для выполнения на обучающих изображениях: случайным образом переведите изображения до 5 пикселей в горизонтальной и вертикальной осях. Увеличение количества данных помогает предотвратить сверхподбор кривой сети и запоминание точных деталей обучающих изображений.
inputSize = [28 28 1]; pixelRange = [-5 5]; imageAugmenter = imageDataAugmenter( ... 'RandXTranslation',pixelRange, ... 'RandYTranslation',pixelRange); augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain,'DataAugmentation',imageAugmenter);
Чтобы автоматически изменить размер изображений валидации, не выполняя дальнейшего увеличения данных, используйте хранилище datastore с дополненными изображениями, не задавая никаких дополнительных операций предварительной обработки.
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
. Не добавляйте формат к меткам классов.
Обучите на графическом процессоре, если он доступен. По умолчанию в minibatchqueue
объект преобразует каждый выход в gpuArray
при наличии графический процессор. Для использования графический процессор требуется Parallel Computing Toolbox™ и поддерживаемый графический процессор. Для получения информации о поддерживаемых устройствах смотрите Поддержку GPU by Release (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
функции, перечисленной в конце примера.
Для одинарного выхода datastore задайте формат пакета '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
Функция градиентов модели
The 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
Функция предсказаний модели
The modelPredictions
функция принимает dlnetwork
dlnet объекта
, а 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
Функция мини-пакетной предварительной обработки
The 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
Функция предварительной обработки мини-пакетных предикторов
The 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);
The Learnables
свойство dlnetwork
объект является таблицей, которая содержит настраиваемые параметры сети. Таблица включает параметры вложенных слоев в отдельные строки. Просмотрите первые несколько строк таблицы learnables.
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
автоматически инициализируется во время обучения. Для получения дополнительной информации смотрите Нейронную сеть для глубокого обучения Composition.
The dlnetwork
функция поддерживает слои, перечисленные ниже, и пользовательские слои без пересылки функций, возвращающих непустое значение памяти.
Слой | Описание |
---|---|
Входной слой изображений вводит 2-D изображения в сеть и применяет нормализацию данных. | |
A входного слоя 3-D изображения вводит 3-D изображения или объемы в сеть и применяет нормализацию данных. | |
Входной слой последовательности вводит данные последовательности в сеть. | |
Входной слой функций вводит данные функций в сеть и применяет нормализацию данных. Используйте этот слой, когда у вас есть набор данных из числовых скаляров, представляющих функции (данные без пространственных или временных размерностей). |
Слой | Описание |
---|---|
Сверточный слой 2-D применяет сверточные фильтры скольжения к входу. | |
Сверточный слой 3-D применяет скользящие кубоидные фильтры свертки к трехмерному входу. | |
Сгруппированный 2-D сверточный слой разделяет входные каналы на группы и применяет скользящие сверточные фильтры. Используйте сгруппированные сверточные слои для разделяемой по каналу (также известной как разделяемая по глубине) свертки. | |
Транспонированный 2-D слой свертки преобразует функции. | |
Транспонированный 3-D слой свертки повышает качество трехмерных карт функций. | |
A полносвязного слоя умножает вход на весовую матрицу и затем добавляет вектор смещения. |
Слой | Описание |
---|---|
Входной слой последовательности вводит данные последовательности в сеть. | |
LSTM слоя изучает долгосрочные зависимости между временными шагами во временных рядах и данными последовательности. | |
Двунаправленный слой LSTM (BiLSTM) изучает двунаправленные долгосрочные зависимости между временными шагами временных рядов или данных последовательности. Эти зависимости могут быть полезны, когда необходимо, чтобы сеть училась из полных временных рядов на каждом временном шаге. | |
GRU слоя изучает зависимости между временными шагами во временных рядах и данными последовательности. |
Для lstmLayer
, bilstmLayer
, и gruLayer
объекты, dlnetwork
объекты поддерживают слои со значениями по умолчанию для StateActivationFunction
и GateActivationFunction
свойства.
Слой | Описание |
---|---|
Слой ReLU выполняет операцию порога каждому элементу входа, где любое значение, меньше нуля, устанавливается в ноль. | |
Утечный слой ReLU выполняет операцию порога, где любое значение входа, меньше нуля, умножается на фиксированный скаляр. | |
Обрезанный слой ReLU выполняет операцию порога, где любое входное значение, меньше нуля, устанавливается равным нулю, а любое значение над усечением устанавливается равным этому усечению. | |
Слой активации ELU выполняет операцию тождеств на положительных входах и экспоненциальную нелинейность на отрицательных входах. | |
Слой активации качания применяет функцию качания к входам слоя. | |
Слой активации гиперболического тангенса (tanh) применяет функцию tanh к входам слоя. | |
Слой softmax применяет функцию softmax к входу. |
Слой | Описание |
---|---|
Слой нормализации партии . нормализует мини-пакет данных по всем наблюдениям для каждого канала независимо. Чтобы ускорить обучение сверточной нейронной сети и уменьшить чувствительность к инициализации сети, используйте нормализацию партии . слои между сверточными слоями и нелинейностями, такими как слои ReLU. | |
Слой нормализации группы нормализует мини-пакет данных между сгруппированными подмножествами каналов для каждого наблюдения независимо. Чтобы ускорить обучение сверточной нейронной сети и уменьшить чувствительность к инициализации сети, используйте слои нормализации группы между сверточными слоями и нелинейностями, такими как слои ReLU. | |
Слой нормализации слоя нормализует мини-пакет данных по всем каналам для каждого наблюдения независимо. Чтобы ускорить обучение рецидивирующих и многослойных нейронных сетей перцептрона и уменьшить чувствительность к инициализации сети, используйте слои нормализации уровня после обучаемых слоев, таких как LSTM и полносвязные слои. | |
Слой нормализации локального отклика (перекрестного канала) канала выполняет нормализацию канала. | |
Выпадающий слой случайным образом устанавливает элементы входа для нуля с заданной вероятностью. | |
Слой обрезки 2-D применяется 2-D обрезки к входу. |
Слой | Описание |
---|---|
Средний слой объединения выполняет понижающую дискретизацию, разделяя вход на прямоугольные области объединения и вычисляя средние значения каждой области. | |
Средний по 3-D слой объединения выполняет понижающую дискретизацию, деля трехмерный вход на кубоидные области объединения и вычисляя средние значения каждой области. | |
Глобальный средний слой объединения выполняет понижающую дискретизацию, вычисляя среднее значение размерностей высоты и ширины входа. | |
Слой 3-D глобального среднего объединения выполняет понижающую дискретизацию, вычисляя среднее значение высоты, ширины и размерностей глубины входа. | |
Максимальный слой объединения выполняет понижающую дискретизацию, разделяя вход на прямоугольные области объединения и вычисляя максимальное значение каждой области. | |
Слой объединения 3-D max выполняет понижающую дискретизацию, деля трехмерный вход на кубоидные области объединения и вычисляя максимум каждой области. | |
Глобальный слой максимального объединения выполняет понижающую дискретизацию, вычисляя максимальные размерности высоты и ширины входа. | |
Слой 3-D глобального максимального объединения выполняет понижающую дискретизацию, вычисляя максимальное значение высоты, ширины и размерностей глубины входа. | |
Максимальный слой отмены охлаждения отменяет восстановление выхода максимального слоя объединения. |
Слой | Описание |
---|---|
Слой сложения добавляет входов из нескольких слоев нейронной сети поэлементно. | |
Слой умножения умножает входы от нескольких нейронных слоев сети поэлементных. | |
Слой конкатенации глубин принимает входы, которые имеют ту же высоту и ширину и конкатенирует их вдоль третьей размерности (размерность канала). | |
Слой конкатенации принимает входы и конкатенирует их вдоль заданного измерения. Входы должны иметь одинаковый размер во всех размерностях, кроме размерности конкатенации. |
dlnetwork
значения состояний dlarray
объектыThe State
a dlnetwork
объект является таблицей, содержащей названия и значения параметра состояния для каждого слоя в сети.
Начиная с R2021a, значения состояний dlarray
объекты. Это изменение позволяет лучше поддерживать при использовании AcceleratedFunction
объекты. Чтобы ускорить функции глубокого обучения, которые имеют часто изменяющиеся входные значения, например, вход, содержащий состояние сети, часто изменяющиеся значения должны быть заданы как dlarray
объекты.
В предыдущих версиях значениями состояния являются числовые массивы.
В большинстве случаев вам не нужно будет обновлять код. Если у вас есть код, который требует, чтобы значения состояния были числовыми массивами, то, чтобы воспроизвести предыдущее поведение, извлеките данные из значений состояния вручную, используя extractdata
с функцией dlupdate
функция.
state = dlupdate(@extractdata,dlnet.State);
Указания и ограничения по применению:
Генерация кода поддерживает только InputNames
и OutputNames
свойства.
Генерация кода не поддерживает dlnetwork
объекты без входных слоев. The Initialized
свойство dlnetwork
объект должен иметь значение true.
Генерация кода для dlnetwork
объекты с sequenceInputLayer
объекты не поддерживаются.
Генерация кода поддерживает только predict
функция объекта. The dlarray
вход в predict
метод должен быть single
тип данных.
Генерация кода не поддерживает dlnetwork
для простой цели C/C + +.
Генерация кода поддерживает MIMO dlnetworks
.
Как создать dlnetwork
объект для генерации кода см. Загрузку предварительно обученных сетей для генерации кода (MATLAB Coder).
Указания и ограничения по применению:
Генерация кода поддерживает только InputNames
и OutputNames
свойства.
Генерация кода не поддерживает dlnetwork
объекты без входных слоев. The Initialized
свойство dlnetwork
объект должен иметь значение true.
Генерация кода для dlnetwork
объекты с sequenceInputLayer
объекты не поддерживаются.
Генерация кода поддерживает только predict
функция объекта. The dlarray
вход в predict
метод должен быть single
тип данных.
Генерация кода поддерживает dlnetwork
для целей cuDNN и TensorRT. Генерация кода не поддерживает dlnetwork
для ARM® Мали и простые цели C/C + +.
При прицеливании TensorRT с INT8
точность, последние слои (слои ) (ы) сети должен быть softmaxLayer
слой.
Генерация кода поддерживает MIMO dlnetworks
.
Как создать dlnetwork
объект для генерации кода см. Загрузку предварительно обученных сетей для генерации кода (GPU Coder).
dlarray
| dlfeval
| dlgradient
| forward
| initialize
| layerGraph
| predict
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.