Полностью подключенный слой
Полностью связанный слой умножает входной сигнал на весовую матрицу и затем добавляет вектор смещения.
возвращает полностью подключенный слой и задает layer = fullyConnectedLayer(outputSize)OutputSize собственность.
устанавливает дополнительные параметры и инициализацию, скорость обучения и регуляризацию, а также layer = fullyConnectedLayer(outputSize,Name,Value)Name с использованием пар имя-значение. Например, fullyConnectedLayer(10,'Name','fc1') создает полностью подключенный слой с размером выхода 10 и именем 'fc1'. Можно указать несколько пар имя-значение. Заключите каждое имя свойства в отдельные кавычки.
OutputSize - Размер выходного документаРазмер вывода для полностью подключенного слоя, заданный как положительное целое число.
Пример:
10
InputSize - Размер ввода'auto' (по умолчанию) | положительное целое числоРазмер входа для полностью подключенного слоя, заданный как положительное целое число или 'auto'. Если InputSize является 'auto', то программное обеспечение автоматически определяет размер ввода во время обучения.
WeightsInitializer - Функция инициализации весов'glorot' (по умолчанию) | 'he' | 'orthogonal' | 'narrow-normal' | 'zeros' | 'ones' | дескриптор функцииФункция для инициализации весов, указанных как одно из следующих:
'glorot' - Инициализируйте веса с помощью инициализатора Glorot [1] (также известного как инициализатор Xavier). Инициализатор Glorot независимо отсчитывает из однородного распределения с нулевым средним и дисперсией 2/(InputSize + OutputSize).
'he' - Инициализируйте веса с помощью инициализатора He [2]. Выборка инициализатора He из нормального распределения с нулевым средним и дисперсией 2/InputSize.
'orthogonal' - Инициализировать входные веса с Q, ортогональной матрицей, заданной QR разложением Z = QR для случайной матрицы Z, дискретизированной из единичного нормального распределения. [3]
'narrow-normal' - Инициализация весов путем независимой выборки из нормального распределения с нулевым средним и стандартным отклонением 0,01.
'zeros' - Инициализация весов с нулями.
'ones' - Инициализируйте веса единицами.
Дескриптор функции - инициализация весов с помощью пользовательской функции. Если указан дескриптор функции, то функция должна иметь вид weights = func(sz), где sz - размер весов. Пример см. в разделе Определение пользовательской функции инициализации веса.
Слой инициализирует веса только в том случае, если Weights пустое свойство.
Типы данных: char | string | function_handle
BiasInitializer - Функция инициализации смещения'zeros' (по умолчанию) | 'narrow-normal' | 'ones' | дескриптор функцииФункция инициализации смещения, указанная как одно из следующих:
'zeros' - Инициализируйте смещение нулями.
'ones' - Инициализировать смещение с помощью таковых.
'narrow-normal' - Инициализировать смещение путем независимой выборки из нормального распределения с нулевым средним и стандартным отклонением 0,01.
Дескриптор функции - инициализация смещения с помощью пользовательской функции. Если указан дескриптор функции, то функция должна иметь вид bias = func(sz), где sz - размер смещения.
Уровень инициализирует смещение только в том случае, если Bias пустое свойство.
Типы данных: char | string | function_handle
Weights - Веса слоев[] (по умолчанию) | матрицаВеса слоев, заданные как матрица.
Веса слоев являются обучаемыми параметрами. Можно указать начальное значение для весов непосредственно с помощью Weights свойство слоя. При обучении сети, если Weights свойство слоя является непустым, то trainNetwork использует Weights свойство в качестве начального значения. Если Weights свойство пустое, затем trainNetwork использует инициализатор, указанный WeightsInitializer свойство слоя.
Во время обучения, Weights является OutputSizeоколо-InputSize матрица.
Типы данных: single | double
Bias - Смещения слоев[] (по умолчанию) | матрицаСмещения слоев, заданные как матрица.
Смещения слоя - это обучаемые параметры. При обучении сети, если Bias является непустым, то trainNetwork использует Bias свойство в качестве начального значения. Если Bias пуст, затем trainNetwork использует инициализатор, указанный BiasInitializer.
Во время обучения, Bias является OutputSizeоколо-1 матрица.
Типы данных: single | double
WeightLearnRateFactor - Коэффициент коэффициента усвоения весовКоэффициент скорости обучения для весов, заданный как неотрицательный скаляр.
Программное обеспечение умножает этот коэффициент на глобальную скорость обучения, чтобы определить скорость обучения для весов на этом уровне. Например, если WeightLearnRateFactor 2, то скорость обучения для весов в этом слое вдвое превышает текущую глобальную скорость обучения. Программа определяет глобальную скорость обучения на основе настроек, указанных в trainingOptions функция.
Пример:
2
BiasLearnRateFactor - Коэффициент успеваемости для предубежденийКоэффициент скорости обучения для смещений, заданный как неотрицательный скаляр.
Программное обеспечение умножает этот коэффициент на глобальную скорость обучения, чтобы определить скорость обучения для отклонений на этом уровне. Например, если BiasLearnRateFactor 2, тогда скорость обучения для отклонений в слое в два раза превышает текущую глобальную скорость обучения. Программа определяет глобальную скорость обучения на основе настроек, указанных в trainingOptions функция.
Пример:
2
WeightL2Factor - коэффициент регуляризации L2 для весовL2 коэффициент регуляризации для весов, определяемый как неотрицательный скаляр.
Программное обеспечение умножает этот коэффициент на глобальный коэффициент регуляризации L2, чтобы определить L2 регуляризацию для весов в этом слое. Например, если WeightL2Factor 2, то L2 регуляризация для весов в этом слое вдвое больше глобального коэффициента регуляризации L2. Можно указать глобальный коэффициент регуляризации L2 с помощью trainingOptions функция.
Пример:
2
BiasL2Factor - коэффициент регуляризации L2 для отклоненийL2 коэффициент регуляризации для смещений, определяемый как неотрицательный скаляр.
Программное обеспечение умножает этот коэффициент на глобальный коэффициент регуляризации L2, чтобы определить L2 регуляризацию для смещений на этом уровне. Например, если BiasL2Factor 2, то L2 регуляризация для смещений в этом слое вдвое превышает глобальный коэффициент регуляризации L2. Можно указать глобальный коэффициент регуляризации L2 с помощью trainingOptions функция.
Пример:
2
Name - Имя слоя'' (по умолчанию) | символьный вектор | строковый скаляр
Имя слоя, указанное как символьный вектор или строковый скаляр. Чтобы включить слой в график слоев, необходимо указать непустое уникальное имя слоя. Если вы обучаете последовательную сеть с уровнем и Name имеет значение ''затем программа автоматически присваивает имя слою во время обучения.
Типы данных: char | string
NumInputs - Количество входовКоличество входов слоя. Этот слой принимает только один вход.
Типы данных: double
InputNames - Входные имена{'in'} (по умолчанию)Входные имена слоя. Этот слой принимает только один вход.
Типы данных: cell
NumOutputs - Количество выходовКоличество выходов уровня. Этот уровень имеет только один выход.
Типы данных: double
OutputNames - Имена выходных данных{'out'} (по умолчанию)Выходные имена слоя. Этот уровень имеет только один выход.
Типы данных: cell
Создание полностью подключенного слоя с размером вывода 10 и именем 'fc1'.
layer = fullyConnectedLayer(10,'Name','fc1')
layer =
FullyConnectedLayer with properties:
Name: 'fc1'
Hyperparameters
InputSize: 'auto'
OutputSize: 10
Learnable Parameters
Weights: []
Bias: []
Show all properties
Включение полностью подключенного слоя в Layer массив.
layers = [ ... imageInputLayer([28 28 1]) convolution2dLayer(5,20) reluLayer maxPooling2dLayer(2,'Stride',2) fullyConnectedLayer(10) softmaxLayer classificationLayer]
layers =
7x1 Layer array with layers:
1 '' Image Input 28x28x1 images with 'zerocenter' normalization
2 '' Convolution 20 5x5 convolutions with stride [1 1] and padding [0 0 0 0]
3 '' ReLU ReLU
4 '' Max Pooling 2x2 max pooling with stride [2 2] and padding [0 0 0 0]
5 '' Fully Connected 10 fully connected layer
6 '' Softmax softmax
7 '' Classification Output crossentropyex
Для определения весов и функций инициализатора смещения используйте WeightsInitializer и BiasInitializer свойства соответственно. Для непосредственного указания весов и смещений используйте Weights и Bias свойства соответственно.
Указать функцию инициализации
Создайте полностью подключенный слой с размером выхода 10 и укажите инициализатор весов в качестве инициализатора He.
outputSize = 10; layer = fullyConnectedLayer(outputSize,'WeightsInitializer','he')
layer =
FullyConnectedLayer with properties:
Name: ''
Hyperparameters
InputSize: 'auto'
OutputSize: 10
Learnable Parameters
Weights: []
Bias: []
Show all properties
Обратите внимание, что Weights и Bias свойства пусты. Во время обучения программное обеспечение инициализирует эти свойства с помощью указанных функций инициализации.
Укажите пользовательскую функцию инициализации
Чтобы указать собственную функцию инициализации для весов и смещений, установите WeightsInitializer и BiasInitializer свойств дескриптора функции. Для этих свойств укажите дескрипторы функций, которые принимают размер весов и смещений в качестве входных и выводят инициализированное значение.
Создайте полностью подключенный слой с выходным размером 10 и укажите инициализаторы, которые отбирают веса и смещения из гауссова распределения со стандартным отклонением 0,0001.
outputSize = 10; weightsInitializationFcn = @(sz) rand(sz) * 0.0001; biasInitializationFcn = @(sz) rand(sz) * 0.0001; layer = fullyConnectedLayer(outputSize, ... 'WeightsInitializer',@(sz) rand(sz) * 0.0001, ... 'BiasInitializer',@(sz) rand(sz) * 0.0001)
layer =
FullyConnectedLayer with properties:
Name: ''
Hyperparameters
InputSize: 'auto'
OutputSize: 10
Learnable Parameters
Weights: []
Bias: []
Show all properties
Опять же, Weights и Bias свойства пусты. Во время обучения программное обеспечение инициализирует эти свойства с помощью указанных функций инициализации.
Указать вес и смещение непосредственно
Создание полностью подключенного слоя с размером выхода 10 и установка весов и смещения на W и b в файле MAT FCWeights.mat соответственно.
outputSize = 10; load FCWeights layer = fullyConnectedLayer(outputSize, ... 'Weights',W, ... 'Bias',b)
layer =
FullyConnectedLayer with properties:
Name: ''
Hyperparameters
InputSize: 720
OutputSize: 10
Learnable Parameters
Weights: [10x720 double]
Bias: [10x1 double]
Show all properties
Здесь, Weights и Bias свойства содержат указанные значения. Во время обучения, если эти свойства не пусты, программа использует указанные значения в качестве начальных весов и смещений. В этом случае программное обеспечение не использует функции инициализатора.
Полностью связанный слой умножает входной сигнал на весовую матрицу и затем добавляет вектор смещения.
За сверточными (и нисходящими) слоями следует один или более полностью соединенных слоев.
Как следует из названия, все нейроны в полностью связанном слое соединяются со всеми нейронами в предыдущем слое. Этот слой объединяет все элементы (локальную информацию), полученные предыдущими слоями по изображению, чтобы идентифицировать более крупные массивы. Для проблем классификации последний полностью подключенный слой объединяет элементы для классификации изображений. Это причина того, что outputSize аргумент последнего полностью подключенного уровня сети равен числу классов набора данных. Для проблем регрессии размер выходного сигнала должен быть равен числу переменных отклика.
Можно также настроить скорость обучения и параметры регуляризации для этого уровня, используя связанные аргументы пары имя-значение при создании полностью связанного уровня. Если вы решите не корректировать их, то trainNetwork использует глобальные параметры обучения, определенные trainingOptions функция. Дополнительные сведения о глобальных параметрах и параметрах обучения на уровне см. в разделе Настройка параметров и сверточная нейронная сеть поезда.
Полностью соединенный слой умножает входной сигнал на весовую матрицу W и затем добавляет вектор смещения b.
Если вход на уровень является последовательностью (например, в сети LSTM), то полностью подключенный уровень действует независимо на каждом временном шаге. Например, если слой перед полностью соединенным слоем выводит матрицу X размера D-by-N-by-S, то полностью соединенный слой выводит матрицу Z размера outputSize-by-N-by-S. На временном шаге t соответствующей записью Z является b, Xt обозначает временной шаг t X.
В R2019a изменилось поведение
Начиная с R2019a, программное обеспечение по умолчанию инициализирует веса слоев этого слоя с помощью инициализатора Glorot. Такое поведение помогает стабилизировать обучение и обычно сокращает время обучения глубоких сетей.
В предыдущих версиях программное обеспечение по умолчанию инициализирует веса слоев путем выборки из нормального распределения с нулевым средним значением и дисперсией 0,01. Чтобы воспроизвести это поведение, установите 'WeightsInitializer' параметр слоя в 'narrow-normal'.
[1] Глорот, Ксавье и Йошуа Бенгио. «Понимание сложности обучения глубоким нейронным сетям». Материалы тринадцатой Международной конференции по искусственному интеллекту и статистике, 249-356. Сардиния, Италия: AISTATS, 2010.
[2] Хэ, Каймин, Сянъу Чжан, Шаоцин Жэнь и Цзянь Сунь. «Углубляясь в выпрямители: превосходя показатели на уровне человека по классификации ImageNet». В трудах Международной конференции IEEE 2015 по компьютерному зрению, 1026-1034. Вашингтон, округ Колумбия: Общество компьютерного зрения IEEE, 2015.
[3] Саксен, Эндрю М., Джеймс Л. Макклелланд и Сурья Гангули. «Точные решения нелинейной динамики обучения в глубоких линейных нейронных сетях». arXiv препринт arXiv:1312.6120 (2013).
batchNormalizationLayer | convolution2dLayer | Конструктор глубоких сетей | reluLayer | trainNetwork
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.