Полносвязный слой
Полносвязный слой умножает вход на матрицу веса и затем добавляет вектор смещения.
возвращает полносвязный слой и задает layer
= fullyConnectedLayer(outputSize
)OutputSize
свойство.
устанавливает дополнительные Параметры и Инициализацию, Изучите Уровень и Регуляризацию и layer
= fullyConnectedLayer(outputSize
,Name,Value
)Name
свойства с помощью пар "имя-значение". Например, fullyConnectedLayer(10,'Name','fc1')
создает полносвязный слой с выходным размером 10 и имя 'fc1'
. Можно задать несколько пар "имя-значение". Заключите каждое имя свойства в одинарные кавычки.
OutputSize
'OutputSize' Выведите размер для полносвязного слоя в виде положительного целого числа.
Пример:
10
InputSize
— Введите размер'auto'
(значение по умолчанию) | положительное целое числоВведите размер для полносвязного слоя в виде положительного целого числа или 'auto'
. Если InputSize
'auto'
, затем программное обеспечение автоматически определяет входной размер во время обучения.
WeightsInitializer
— Функция, чтобы инициализировать веса'glorot'
(значение по умолчанию) | 'he'
| 'orthogonal'
| 'narrow-normal'
| 'zeros'
| 'ones'
| указатель на функциюФункция, чтобы инициализировать веса в виде одного из следующего:
'glorot'
– Инициализируйте веса инициализатором Glorot [1] (также известный как инициализатор Ксавьера). Инициализатор Glorot независимо выборки от равномерного распределения с нулевым средним значением и отклонением 2/(InputSize + OutputSize)
.
'he'
– Инициализируйте веса Им инициализатор [2]. Он выборки инициализатора от нормального распределения с нулевым средним значением и отклонением 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
- 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 и задайте инициализатор весов, чтобы быть Им инициализатор.
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
- N S. На временном шаге t соответствующая запись Z , где обозначает временной шаг t X.
Поведение изменяется в R2019a
Начиная в R2019a, программное обеспечение, по умолчанию, инициализирует веса слоя этого слоя с помощью инициализатора Glorot. Это поведение помогает стабилизировать обучение и обычно уменьшает учебное время глубоких сетей.
В предыдущих релизах программное обеспечение, по умолчанию, инициализирует веса слоя путем выборки от нормального распределения с нулевым средним значением и отклонением 0.01. Чтобы воспроизвести это поведение, установите 'WeightsInitializer'
опция слоя к 'narrow-normal'
.
[1] Glorot, Ксавьер и Иосуа Бенхио. "Изучая трудность учебных глубоких нейронных сетей feedforward". В Продолжениях тринадцатой международной конференции по вопросам искусственного интеллекта и статистики, стр 249-256. 2010.
[2] Он, Kaiming, Сянюй Чжан, Шаоцин Жэнь и Цзянь Сунь. "Копаясь глубоко в выпрямителях: Превосходная производительность человеческого уровня на imagenet классификации". В Продолжениях международной конференции IEEE по вопросам компьютерного зрения, стр 1026-1034. 2015.
[3] Saxe, Эндрю М., Джеймс Л. Макклеллэнд и Сурья Гэнгули. "Точные решения нелинейной динамики изучения в глубоких линейных нейронных сетях". arXiv предварительно распечатывают arXiv:1312.6120 (2013).
Deep Network Designer | batchNormalizationLayer
| convolution2dLayer
| reluLayer
| trainNetwork
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.