batchnorm

Нормируйте каждый канал входных данных

Описание

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

Примечание

Эта функция применяет пакетную операцию нормализации к dlarray данные. Если вы хотите применить пакетную нормализацию в layerGraph объект или Layer массив, используйте следующий слой:

пример

[dlY,mu,sigma] = batchnorm(dlX,offset,scaleFactor) нормирует каждый канал входного мини-пакета dlX использование среднего значения и статистики отклонения, вычисленной из каждого канала и, применяет масштабный коэффициент и смещение.

Нормированная активация вычисляется с помощью следующей формулы:

x^i=xiμcσc2+ε

где xi является входной активацией, μc (mu) и σc2 (sigma) среднее значение на канал и отклонение, соответственно, и ε является маленькой константой. mu и sigma вычисляются по всему 'S' (пространственный), 'B' (пакет), 'T' (время) и 'U' (незаданные) размерности в dlX для каждого канала.

Нормированная активация возмещается и масштабируется согласно следующей формуле:

yi=γx^i+β.

Смещение β и масштабный коэффициент γ задано с offset и scaleFactor аргументы.

Вход dlX отформатированный dlarray с метками размерности. Выход dlY отформатированный dlarray с той же размерностью помечает как dlX.

dlY = batchnorm(dlX,offset,scaleFactor,mu,sigma) нормирует каждый канал входа dlX использование заданного mu и sigma статистика и применяет масштабный коэффициент и смещение.

пример

[dlY,datasetMu,datasetSigma] = batchnorm(dlX,offset,scaleFactor,datasetMu,datasetSigma) нормирует каждый канал входного мини-пакета dlX использование среднего значения и статистики отклонения, вычисленной из каждого канала и, применяет масштабный коэффициент и смещение. Функция также обновляет статистику набора данных datasetMu и datasetSigma использование следующей формулы:

sn=ϕsx+(1ϕ)sn1

где sn является статистической величиной, вычисленной по нескольким мини-пакетам, sx является статистической величиной на канал текущего мини-пакета, и ϕ является значением затухания для статистической величины.

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

[___] = batchnorm(___,'DataFormat',FMT) также указывает, что размерность маркирует FMT когда dlX не отформатированный dlarray в дополнение к входным параметрам в предыдущих синтаксисах. Выход dlY бесформатный dlarray с той же размерностью заказывают как dlX.

[___] = batchnorm(___,Name,Value) задает опции с помощью одного или нескольких аргументов пары "имя-значение" в дополнение к входным параметрам в предыдущих синтаксисах. Например, 'MeanDecay',3 устанавливает уровень затухания расчета скользящего среднего значения.

Примеры

свернуть все

Используйте batchnorm нормировать каждый канал мини-пакета и получить статистику нормализации на канал.

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

height = 4;
width = 4;
channels = 3;
observations = 1;

X = rand(height,width,channels,observations);
dlX = dlarray(X,'SSCB');

Создайте learnable параметры.

offset = zeros(channels,1);
scaleFactor = ones(channels,1);

Вычислите пакетную нормализацию и получите статистику каждого канала пакета.

[dlY,mu,sigma] = batchnorm(dlX,offset,scaleFactor);
mu
sigma
mu = 3×1    
    0.6095
    0.6063
    0.4619
sigma = 3×1    
    0.1128
    0.0880
    0.0805

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

Создайте три пакета данных. Данные состоят из 10 10 массивов с 5 каналами. Каждый пакет содержит 20 наблюдений.

height = 10;
width = 10;
channels = 5;
observations = 20;

X_1 = rand(height,width,channels,observations);
dlX_1 = dlarray(X_1,'SSCB');

X_2 = 1.5*rand(height,width,channels,observations);
dlX_2 = dlarray(X_2,'SSCB');

X_3 = 2.5*rand(height,width,channels,observations);
dlX_3 = dlarray(X_3,'SSCB');

Создайте learnable параметры.

offset = rand(channels,1);
scale = ones(channels,1);

Вычислите batchnormalization первого пакета данных, dlX_1. Получите значения среднего значения и отклонение этого пакета как выходные параметры.

[dlY_1,mu,sigma] = batchnorm(dlX_1,offset,scale);

Вычислите пакетную нормализацию второго пакета данных, dlX_2. Используйте mu и sigma входные параметры должны получить значения объединенного среднего значения и отклонение данных в пакетах dlX_1 и dlX_2.

[dlY_2,datasetMu,datasetSigma] = batchnorm(dlX_2,offset,scale,mu,sigma);

Вычислите пакетную нормализацию итогового пакета данных, dlX_3. Обновите статистику набора данных datasetMu и datasetSigma получить значения объединенного среднего значения и отклонение всех данных в пакетах dlX_1, dlX_2, и dlX_3.

[dlY_3,datasetMuFull,datasetSigmaFull] = batchnorm(dlX_3,offset,scale,datasetMu,datasetSigma);

Наблюдайте изменение в среднем значении через каждый набор данных

plot([mu';datasetMu';datasetMuFull'])
legend({'Channel 1','Channel 2','Channel 3','Channel 4','Channel 5'},'Location','southeast')
xticks([1 2 3])
xlabel('Number of Batches')
xlim([0.9 3.1])
ylabel('Per-Channel Mean')
title('Dataset Mean')

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

свернуть все

Входные данные, заданные как dlarray с или без меток размерности или числового массива. Когда dlX не отформатированный dlarray, необходимо задать формат этикетки размерности с помощью 'DataFormat',FMT. Если dlX числовой массив, по крайней мере один из offset или scaleFactor должен быть dlarray.

dlX должен иметь 'C' размерность канала.

Типы данных: single | double

Канал возместил β, заданный как dlarray вектор с или без меток размерности или числового вектора.

Если offset отформатированный dlarray, это должно содержать 'C' размерность одного размера с 'C' размерность входных данных.

Типы данных: single | double

Масштабный коэффициент канала γ, заданный как dlarray вектор с или без меток размерности или числового вектора.

Если scaleFactor отформатированный dlarray, это должно содержать 'C' размерность одного размера с 'C' размерность входных данных.

Типы данных: single | double

Следует иметь в виду статистическую величину для нормализации, заданной как числовой вектор той же длины как 'C' размерность входных данных.

mu вычисляется по всему 'S' (пространственный), 'B' (пакет), 'T' (время) и 'U' (незаданные) размерности в dlX для каждого канала.

Типы данных: single | double

Статистическая величина отклонения для нормализации, заданной как числовой вектор той же длины как 'C' размерность входных данных.

sigma вычисляется по всему 'S' (пространственный), 'B' (пакет), 'T' (время) и 'U' (незаданные) размерности в dlX для каждого канала.

Типы данных: single | double

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

Типы данных: single | double

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

Типы данных: single | double

Порядок размерности бесформатных входных данных, заданных как разделенная запятой пара, состоящая из 'DataFormat' и символьный массив или строка, которая обеспечивает метку для каждой размерности данных. Каждый символ в FMT должно быть одно из следующего:

  • 'S' — Пространственный

  • 'C' — Канал

  • 'B' — Пакет (например, выборки и наблюдения)

  • 'T' — Время (например, последовательности)

  • 'U' — Незаданный

Можно указать, что несколько размерностей пометили 'S' или 'U'. Можно использовать, маркирует 'C'B, или 'T' самое большее однажды.

Необходимо задать 'DataFormat' когда входные данные dlX бесформатный dlarray.

Пример: 'DataFormat','SSCB'

Типы данных: char | string

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'MeanDecay',0.3,'MeanVariance',0.5 устанавливает уровень затухания для расчетов скользящего среднего значения среднего значения и отклонения нескольких пакетов данных к 0.3 и 0.5, соответственно.

Смещение отклонения для предотвращения делит на нуль ошибки, заданные как разделенная запятой пара, состоящая из 'Epsilon' и числовой скаляр. Заданное значение должно быть больше 1e-5. Значением по умолчанию является 1e-5.

Типы данных: single | double

Значение затухания для расчета скользящего среднего значения datasetMu выведите, заданный как разделенная запятой пара, состоящая из 'MeanDecay' и числовой скаляр между 0 и 1. Значением по умолчанию является 0.1.

Типы данных: single | double

Значение затухания для расчета скользящего среднего значения datasetSigma выведите, заданный как разделенная запятой пара, состоящая из 'VarianceDecay' и числовой скаляр между 0 и 1. Значением по умолчанию является 0.1.

Типы данных: single | double

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

свернуть все

Нормированные данные, возвращенные как dlarray. Выход dlY имеет тот же базовый тип данных как вход dlX.

Если входные данные dlX отформатированный dlarray, dlY имеет те же метки размерности как dlX. Если входными данными не является отформатированный dlarray, dlY бесформатный dlarray с той же размерностью заказывают как входные данные.

Среднее значение на канал входных данных, возвращенных как числовой вектор-столбец с длиной, равняется размеру 'C' размерность входных данных.

Отклонение на канал входных данных, возвращенных как числовой вектор-столбец с длиной, равняется размеру 'C' размерность входных данных.

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

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

datasetMu = meanDecay × currentMu + (1 – meanDecay) × datasetMu,

где currentMu среднее значение канала, вычисленное из входных данных и значения meanDecay задан с помощью 'MeanDecay' аргумент пары "имя-значение".

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

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

datasetSigma = varianceDecay × currentSigma + (1 – varianceDecay) × datasetSigma,

где currentSigma отклонение канала, вычисленное из входных данных и значения varianceDecay задан с помощью 'VarianceDecay' пара "имя-значение".

Больше о

свернуть все

Пакетная нормализация

batchnorm функция нормирует каждый входной канал мини-пакета данных. Для получения дополнительной информации см. определение Пакетного Слоя Нормализации на batchNormalizationLayer страница с описанием.

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

Введенный в R2019b