Когда вы обучаете использование сети слои, графики слоев или dlnetwork
объекты, программное обеспечение автоматически инициализирует настраиваемые параметры согласно свойствам инициализации слоя. Когда вы задаете модель глубокого обучения как функцию, необходимо инициализировать настраиваемые параметры вручную.
Как вы инициализируете настраиваемые параметры (например, веса и смещения) может оказать большое влияние на то, как быстро модель глубокого обучения сходится.
Совет
Эта тема объясняет, как инициализировать настраиваемые параметры для модели глубокого обучения, задал функцию в пользовательском учебном цикле. Чтобы изучить, как задать инициализацию настраиваемого параметра для слоя глубокого обучения, используйте соответствующее свойство слоя. Например, чтобы установить инициализатор весов convolution2dLayer
объект, используйте WeightsInitializer
свойство.
Эта таблица показывает инициализации по умолчанию для настраиваемых параметров для каждого слоя и обеспечивает ссылки, которые показывают, как инициализировать настраиваемые параметры для функций модели при помощи той же инициализации.
Слой | Настраиваемый параметр | Инициализация по умолчанию |
---|---|---|
convolution2dLayer | Веса | Инициализация Glorot |
Смещение | Нулевая инициализация | |
convolution3dLayer | Веса | Инициализация Glorot |
Смещение | Нулевая инициализация | |
groupedConvolution2dLayer | Веса | Инициализация Glorot |
Смещение | Нулевая инициализация | |
transposedConv2dLayer | Веса | Инициализация Glorot |
Смещение | Нулевая инициализация | |
transposedConv3dLayer | Веса | Инициализация Glorot |
Смещение | Нулевая инициализация | |
fullyConnectedLayer | Веса | Инициализация Glorot |
Смещение | Нулевая инициализация | |
batchNormalizationLayer | Смещение | Нулевая инициализация |
Шкала | Инициализация единиц | |
lstmLayer | Введите веса | Инициализация Glorot |
Текущие веса | Ортогональная инициализация | |
Смещение | Модуль забывает инициализацию логического элемента | |
gruLayer | Введите веса | Инициализация Glorot |
Текущие веса | Ортогональная инициализация | |
Смещение | Нулевая инициализация | |
wordEmbeddingLayer | Веса | Гауссова Инициализация, со средним значением 0 и стандартным отклонением 0.01 |
При инициализации настраиваемых параметров для функций модели необходимо задать параметры правильного размера. Размер настраиваемых параметров зависит от типа операции глубокого обучения.
Операция | Настраиваемый параметр | Размер |
---|---|---|
batchnorm | Смещение |
|
Шкала |
| |
dlconv | Веса |
|
Смещение | Одно из следующего:
| |
dlconv (сгруппированный) | Веса |
|
Смещение | Одно из следующего:
| |
dltranspconv | Веса |
|
Смещение | Одно из следующего:
| |
dltranspconv (сгруппированный) | Веса |
|
Смещение | Одно из следующего:
| |
fullyconnect | Веса |
|
Смещение |
| |
gru | Введите веса |
|
Текущие веса |
| |
Смещение |
| |
lstm | Введите веса |
|
Текущие веса |
| |
Смещение |
|
Glorot (также известный как Ксавьера) инициализатор [1] демонстрационные веса от равномерного распределения с границами , где значения No и Ni зависят от типа операции глубокого обучения.
Операция | Настраиваемый параметр | No | Ni |
---|---|---|---|
dlconv | Веса |
|
|
dlconv (сгруппированный) | Веса |
|
|
dltranspconv | Веса |
|
|
dltranspconv (сгруппированный) | Веса |
|
|
fullyconnect | Веса | Количество выходных каналов операции | Количество входных каналов операции |
gru | Введите веса | 3*numHiddenUnits , где numHiddenUnits количество скрытых модулей операции | Количество входных каналов операции |
Текущие веса | 3*numHiddenUnits , где numHiddenUnits количество скрытых модулей операции | Количество скрытых модулей операции | |
lstm | Введите веса | 4*numHiddenUnits , где numHiddenUnits количество скрытых модулей операции | Количество входных каналов операции |
Текущие веса | 4*numHiddenUnits , где numHiddenUnits количество скрытых модулей операции | Количество скрытых модулей операции |
Чтобы инициализировать настраиваемые параметры с помощью инициализатора Glorot легко, можно задать пользовательскую функцию. Функциональный initializeGlorot
берет в качестве входа размер настраиваемых параметров sz
и значения No и Ni (numOut
и numIn
, соответственно), и возвращает произведенные веса как dlarray
объект с базовым типом 'single'
.
function weights = initializeGlorot(sz,numOut,numIn) Z = 2*rand(sz,'single') - 1; bound = sqrt(6 / (numIn + numOut)); weights = bound * Z; weights = dlarray(weights); end
Инициализируйте веса для сверточной операции с 128 фильтрами размера, 5 на 5 и 3 входных канала.
filterSize = [5 5]; numChannels = 3; numFilters = 128; sz = [filterSize numChannels numFilters]; numOut = prod(filterSize) * numFilters; numIn = prod(filterSize) * numFilters; parameters.conv.Weights = initializeGlorot(sz,numOut,numIn);
Он инициализатор [2] демонстрационные веса от нормального распределения с нулевым средним значением и отклонением , где значение Ni зависит от типа операции глубокого обучения.
Операция | Настраиваемый параметр | Ni |
---|---|---|
dlconv | Веса |
|
dltranspconv | Веса |
|
fullyconnect | Веса | Количество входных каналов операции |
gru | Введите веса | Количество входных каналов операции |
Текущие веса | Количество скрытых модулей операции. | |
lstm | Введите веса | Количество входных каналов операции |
Текущие веса | Количество скрытых модулей операции. |
Чтобы инициализировать настраиваемые параметры с помощью Него инициализатор легко, можно задать пользовательскую функцию. Функциональный initializeHe
берет в качестве входа размер настраиваемых параметров sz
, и значение Ni, и возвращает произведенные веса как dlarray
объект с базовым типом 'single'
.
function weights = initializeHe(sz,numIn) weights = randn(sz,'single') * sqrt(2/numIn); weights = dlarray(weights); end
Инициализируйте веса для сверточной операции с 128 фильтрами размера, 5 на 5 и 3 входных канала.
filterSize = [5 5]; numChannels = 3; numFilters = 128; sz = [filterSize numChannels numFilters]; numIn = prod(filterSize) * numFilters; parameters.conv.Weights = initializeHe(sz,numIn);
Гауссовы демонстрационные веса инициализатора от нормального распределения.
Чтобы инициализировать настраиваемые параметры с помощью Гауссова инициализатора легко, можно задать пользовательскую функцию. Функциональный initializeGaussian
берет в качестве входа размер настраиваемых параметров sz
, среднее значение распределения mu
, и стандартное отклонение распределения sigma
, и возвращает произведенные веса как dlarray
объект с базовым типом 'single'
.
function weights = initializeGaussian(sz,mu,sigma) weights = randn(sz,'single')*sigma + mu; weights = dlarray(weights); end
Инициализируйте веса для операции встраивания с размерностью 300 и размером словаря 5 000 использований Гауссова инициализатора со средним значением 0 и стандартным отклонением 0.01.
embeddingDimension = 300; vocabularySize = 5000; mu = 0; sigma = 0.01; sz = [embeddingDimension vocabularySize]; parameters.emb.Weights = initializeGaussian(sz,mu,sigma);
Универсальные демонстрационные веса инициализатора от равномерного распределения.
Чтобы инициализировать настраиваемые параметры с помощью универсального инициализатора легко, можно задать пользовательскую функцию. Функциональный initializeUniform
берет в качестве входа размер настраиваемых параметров sz
, и распределение связало bound
, и возвращает произведенные веса как dlarray
объект с базовым типом 'single'
.
function parameter = initializeUniform(sz,bound) Z = 2*rand(sz,'single') - 1; parameter = bound * Z; parameter = dlarray(parameter); end
Инициализируйте веса для механизма внимания с размером 100 100, и связал 0,1 использования универсального инициализатора.
sz = [100 100]; bound = 0.1; parameters.attentionn.Weights = initializeUniform(sz,bound);
Ортогональный инициализатор возвращает ортогональный матричный Q, данный разложением QR Z = QR, откуда Z производится модульного нормального распределения, и размер Z совпадает с размером настраиваемого параметра.
Чтобы инициализировать настраиваемые параметры с помощью ортогонального инициализатора легко, можно задать пользовательскую функцию. Функциональный initializeOrthogonal
берет в качестве входа размер настраиваемых параметров sz
, и возвращает ортогональную матрицу как dlarray
объект с базовым типом 'single'
.
function parameter = initializeOrthogonal(sz) Z = randn(sz,'single'); [Q,R] = qr(Z,0); D = diag(R); Q = Q * diag(D ./ abs(D)); parameter = dlarray(Q); end
Инициализируйте текущие веса для операции LSTM с 100 скрытыми модулями с помощью ортогонального инициализатора.
numHiddenUnits = 100; sz = [4*numHiddenUnits numHiddenUnits]; parameters.lstm.RecurrentWeights = initializeOrthogonal(sz);
Модуль забывает, что инициализатор логического элемента инициализирует смещение для операции LSTM, таким образом, что забыть компонент логического элемента смещений является единицами, и остающиеся записи являются нулями.
Чтобы инициализировать настраиваемые параметры с помощью ортогонального инициализатора легко, можно задать пользовательскую функцию. Функциональный initializeUnitForgetGate
берет в качестве входа количество скрытых модулей в операции LSTM и возвращает смещение как dlarray
объект с базовым типом 'single'
.
function bias = initializeUnitForgetGate(numHiddenUnits) bias = zeros(4*numHiddenUnits,1,'single'); idx = numHiddenUnits+1:2*numHiddenUnits; bias(idx) = 1; bias = dlarray(bias); end
Инициализируйте смещение операции LSTM с 100 скрытыми модулями с помощью модуля, забывают инициализатор логического элемента.
numHiddenUnits = 100;
parameters.lstm.Bias = initializeUnitForgetGate(numHiddenUnits,'single');
Чтобы инициализировать настраиваемые параметры единицами легко, можно задать пользовательскую функцию. Функциональный initializeOnes
берет в качестве входа размер настраиваемых параметров sz
, и возвращает параметры как dlarray
объект с базовым типом 'single'
.
function parameter = initializeOnes(sz) parameter = ones(sz,'single'); parameter = dlarray(parameter); end
Инициализируйте шкалу для операции нормализации партии. с 128 входными каналами с единицами.
numChannels = 128; sz = [numChannels 1]; parameters.bn.Scale = initializeOnes(sz);
Чтобы инициализировать настраиваемые параметры нулями легко, можно задать пользовательскую функцию. Функциональный initializeZeros
берет в качестве входа размер настраиваемых параметров sz
, и возвращает параметры как dlarray
объект с базовым типом 'single'
.
function parameter = initializeZeros(sz) parameter = zeros(sz,'single'); parameter = dlarray(parameter); end
Инициализируйте смещение для операции нормализации партии. с 128 входными каналами с нулями.
numChannels = 128; sz = [numChannels 1]; parameters.bn.Offset = initializeZeros(sz);
Рекомендуется сохранить настраиваемые параметры для данной функции модели в отдельном объекте, такие как struct, таблица или массив ячеек. Для примера, показывающего, как инициализировать настраиваемые параметры как struct, смотрите, Обучат сеть Используя Функцию Модели.
Если вы обучаете свою модель с помощью обучающих данных, который хранится на графическом процессоре, настраиваемые параметры функции модели преобразованы в объекты gpuArray и сохранены на графическом процессоре.
Прежде, чем сохранить ваши настраиваемые параметры, это - методические рекомендации, чтобы собрать все параметры, в случае, если они загружаются на машину без графического процессора. Использование dlupdate
собрать настраиваемые параметры, сохраненные как struct, таблица или массив ячеек. Например, если у вас есть сетевые настраиваемые параметры, сохраненные на графическом процессоре в struct, таблице или массиве ячеек parameters
, можно собрать все параметры на к центральному процессору при помощи следующего кода:
parameters = dlupdate(@gather,parameters);
Если вы загружаете настраиваемые параметры, которые не находятся на графическом процессоре, можно перейти параметры на использование графического процессора dlupdate
. Выполнение так гарантирует, что ваша сеть выполняется на графическом процессоре для обучения и вывода, независимо от того, где входные данные хранятся. Чтобы перейти настраиваемые параметры на графический процессор, используйте dlupdate
функция:
parameters = dlupdate(@gpuArray,parameters);
[1] Glorot, Ксавьер и Иосуа Бенхио. "Изучая Трудность Учебных Глубоких Нейронных сетей Прямого распространения". В Продолжениях Тринадцатой Международной конференции по вопросам Искусственного интеллекта и Статистики, 249–356. Сардиния, Италия: AISTATS, 2010.
[2] Он, Kaiming, Сянюй Чжан, Шаоцин Жэнь и Цзянь Сунь. "Копаясь Глубоко в Выпрямителях: Превышение Эффективности Человеческого Уровня на Классификации ImageNet". В Продолжениях 2 015 Международных конференций IEEE по вопросам Компьютерного зрения, 1026–1034. Вашингтон, округ Колумбия: Общество Компьютерного зрения IEEE, 2015.
dlarray
| dlfeval
| dlgradient
| dlnetwork