Полносвязный слой
A полносвязного слоя умножает вход на весовую матрицу и затем добавляет вектор смещения.
возвращает полносвязный слой и задает 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 = Q R для случайной матрицы, 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
-by- InputSize
матрица.
Типы данных: single
| double
Bias
- Смещения слоев[]
(по умолчанию) | матрицаСмещения слоя, заданные как матрица.
Смещения слоя являются настраиваемыми параметрами. При обучении сети, если Bias
непусто, тогда trainNetwork
использует Bias
свойство как начальное значение. Если Bias
пуст, тогда trainNetwork
использует инициализатор, заданный как BiasInitializer
.
Во время обучения Bias
является OutputSize
-by- 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
свойства содержат заданные значения. Во время обучения, если эти свойства не пусты, то программное обеспечение использует заданные значения в качестве начальных весов и смещений. В этом случае программное обеспечение не использует функции инициализатора.
A полносвязного слоя умножает вход на весовую матрицу и затем добавляет вектор смещения.
Сверточные (и понижающие) слои сопровождаются одним или несколькими полносвязными слоями.
Как следует из имени, все нейроны в полностью соединенном слое соединяются со всеми нейронами в предыдущем слое. Этот слой объединяет все функции (локальная информация), выученные предыдущими слоями по всему изображению, чтобы идентифицировать большие шаблоны. Для задач классификации последний полносвязный слой объединяет функции для классификации изображений. Это причина того, что outputSize
аргумент последнего полностью подключенного уровня сети равен количеству классов набора данных. Для задач регрессии размер выхода должен быть равен количеству переменных отклика.
Можно также настроить скорость обучения и параметры регуляризации для этого слоя, используя связанные аргументы пары "имя-значение" при создании полносвязного слоя. Если вы решите не настраивать их, то trainNetwork
использует глобальные параметры обучения, заданные в trainingOptions
функция. Для получения дополнительной информации об опциях глобального и слоевого обучения смотрите Настройте Параметры и Обучите Сверточную Нейронную Сеть.
A полносвязного слоя умножает вход на весовую матрицу W а затем добавляет вектор смещения b.
Если вход в слой является последовательностью (для примера, в сети LSTM), то полносвязный слой действует независимо на каждом временном шаге. Например, если слой перед полносвязным слоем выводит X массива размера D -by- N -by- S, то полносвязной слой выводит Z размера
массива outputSize
-by- N -by- S. На временном шаге t соответствующий вход Z является, где обозначает временной шаг t из X.
Поведение изменено в R2019a
Начиная с R2019a, программное обеспечение по умолчанию инициализирует веса слоев этого слоя с помощью инициализатора Glorot. Такое поведение помогает стабилизировать обучение и обычно сокращает время обучения глубоких сетей.
В предыдущих релизах программное обеспечение по умолчанию инициализирует веса слоев путем дискретизации из нормального распределения с нулем среднего и отклонением 0,01. Чтобы воспроизвести это поведение, установите 'WeightsInitializer'
опция слоя для 'narrow-normal'
.
[1] Глорот, Ксавьер и Йошуа Бенгио. «Понимание сложности обучения нейронных сетей с глубоким Feedforward». В работе тринадцатой Международной конференции по искусственному интеллекту и статистике, 249-356. Сардиния, Италия: AISTATS, 2010.
[2] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. «Delving Deep Into Rectifiers: Overpassing Human-Level Performance on ImageNet Classification». В работе Международной конференции IEEE по компьютерному зрению 2015 года, 1026-1034. Вашингтон, округ Колумбия: IEEE Компьютерное Зрение Society, 2015.
[3] Saxe, Andrew M., James L. McClelland, and Surya Ganguli. «Точные решения нелинейной динамики обучения в глубоких линейных нейронных сетях» .arXiv preprint arXiv:1312.6120 (2013).
batchNormalizationLayer
| convolution2dLayer
| Deep Network Designer | reluLayer
| trainNetwork
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.