batchnorm

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

Описание

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

Примечание

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

пример

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

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

x^i=xiμcσc2+ε

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

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

yi=γx^i+β.

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

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

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

пример

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

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');

Создайте настраиваемые параметры.

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

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

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

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

Создайте три пакета данных. Данные состоят из 10 10 случайных массивов с пятью каналами. Каждый пакет содержит 20 наблюдений. Вторые и третьи пакеты масштабируются мультипликативным фактором 1.5 и 2.5, соответственно, таким образом, среднее значение набора данных увеличивается с каждым пакетом.

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

X1 = rand(height,width,channels,observations);
dlX1 = dlarray(X1,'SSCB');

X2 = 1.5*rand(height,width,channels,observations);
dlX2 = dlarray(X2,'SSCB');

X3 = 2.5*rand(height,width,channels,observations);
dlX3 = dlarray(X3,'SSCB');

Создайте настраиваемые параметры.

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

Нормируйте первый пакет данных, dlX1, с помощью batchnorm. Получите значения среднего значения и отклонение этого пакета как выходные параметры.

[dlY1,mu,sigmaSq] = batchnorm(dlX1,offset,scale);

Нормируйте второй пакет данных, dlX2. Используйте mu и sigmaSq как вводит, чтобы получить значения объединенного среднего значения и отклонение данных в пакетах dlX1 и dlX2.

[dlY2,datasetMu,datasetSigmaSq] = batchnorm(dlX2,offset,scale,mu,sigmaSq);

Нормируйте итоговый пакет данных, dlX3. Обновите статистику набора данных datasetMu и datasetSigmaSq получить значения объединенного среднего значения и отклонение всех данных в пакетах dlX1, dlX2, и dlX3.

[dlY3,datasetMuFull,datasetSigmaSqFull] = batchnorm(dlX3,offset,scale,datasetMu,datasetSigmaSq);

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

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('Data Set 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' размерность входных данных.

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

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

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

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

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

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

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

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

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

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

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

  • 'C' — Канал

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

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

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

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

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

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

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

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

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

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

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

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

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

datasetSigmaSq = varianceDecay × currentSigmaSq + (1 – varianceDecay) × datasetSigmaSq,

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

Больше о

свернуть все

Нормализация партии.

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

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

Введенный в R2019b