Полносвязный слой
Полносвязный слой умножает вход на матрицу веса и затем добавляет вектор смещения.
layer = fullyConnectedLayer(outputSize)
layer = fullyConnectedLayer(outputSize,Name,Value)
возвращает полносвязный слой и задает свойство 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.
нули
Инициализируйте веса с нулями.
единицы
Инициализируйте веса с единицами.
Указатель на функцию – Инициализирует веса с пользовательской функцией. Если вы задаете указатель на функцию, то функция должна иметь форму weights = func(sz)
, где sz
является размером весов. Для примера смотрите, Задают Пользовательскую Функцию Инициализации Веса.
Слой только инициализирует веса, когда свойство Weights
пусто.
Типы данных: char
| string
| function_handle
BiasInitializer
— Функция, чтобы инициализировать смещение'zeros'
(значение по умолчанию) | 'narrow-normal'
| 'ones'
| указатель на функциюФункция, чтобы инициализировать смещение, заданное как одно из следующего:
нули
Инициализируйте смещение с нулями.
единицы
Инициализируйте смещение с единицами.
'narrow-normal'
– Инициализируйте смещение путем независимой выборки от нормального распределения с нулевым средним и стандартным отклонением 0.01.
Указатель на функцию – Инициализирует смещение с пользовательской функцией. Если вы задаете указатель на функцию, то функция должна иметь форму bias = func(sz)
, где sz
является размером смещения.
Слой только инициализирует смещение, когда свойство Bias
пусто.
Типы данных: char
| string
| function_handle
Weights
— Веса слоя[]
(значение по умолчанию) | матрицаВеса слоя, заданные как матрица.
Веса слоя являются learnable параметрами. Можно задать начальное значение для весов непосредственно с помощью свойства Weights
слоя. При обучении сети, если свойство Weights
слоя непусто, то trainNetwork
использует свойство Weights
в качестве начального значения. Если свойство Weights
пусто, то trainNetwork
использует инициализатор, заданный свойством WeightsInitializer
слоя.
В учебное время Weights
является OutputSize
-by-InputSize
матрица.
Типы данных: single | double
Bias
— Смещения слоя[]
(значение по умолчанию) | матрицаСмещения слоя, заданные как матрица.
Смещения слоя являются learnable параметрами. При обучении сети, если 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
установлен в ''
, то программное обеспечение автоматически присваивает имя к слою в учебное время.
Типы данных: 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
-by-N-by-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).
batchNormalizationLayer
| convolution2dLayer
| reluLayer
| trainNetwork
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.