Полносвязный слой
Полносвязный слой умножает вход на матрицу веса и затем добавляет вектор смещения.
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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.