fullyConnectedLayer

Полносвязный слой

Описание

A полносвязного слоя умножает вход на весовую матрицу и затем добавляет вектор смещения.

Создание

Описание

layer = fullyConnectedLayer(outputSize) возвращает полносвязный слой и задает OutputSize свойство.

пример

layer = fullyConnectedLayer(outputSize,Name,Value) устанавливает необязательные параметры и инициализацию, скорость обучения и регуляризацию и Name свойства с использованием пар "имя-значение". Для примера, fullyConnectedLayer(10,'Name','fc1') создает полносвязный слой с размером выходом 10 и именем 'fc1'. Можно задать несколько пары "имя-значение". Заключайте каждое имя свойства в одинарные кавычки.

Свойства

расширить все

Полносвязные

Выходной размер для полностью подключенного слоя, заданный как положительное целое число.

Пример: 10

Размер входа для полносвязного слоя, заданный как положительное целое или 'auto'. Если InputSize является 'auto', затем программное обеспечение автоматически определяет размер входа во время обучения.

Параметры и инициализация

Функция для инициализации весов, заданная как одно из следующего:

  • '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

Функция для инициализации смещения, заданная как одно из следующего:

  • 'zeros' - Инициализируйте смещение с нулями.

  • 'ones' - Инициализируйте смещение с таковые.

  • 'narrow-normal' - Инициализируйте смещение путем независимой выборки из нормального распределения с нулевым средним и стандартным отклонением 0,01.

  • Указатель на функцию - Инициализируйте смещение с помощью пользовательской функции. Если вы задаете указатель на функцию, то функция должна иметь вид bias = func(sz), где sz - размер смещения.

Слой инициализирует смещение только тогда, когда Bias свойство пустое.

Типы данных: char | string | function_handle

Веса слоев, заданные как матрица.

Веса слоев являются настраиваемыми параметрами. Можно задать начальное значение для весов непосредственно с помощью Weights свойство слоя. При обучении сети, если Weights свойство слоя непусто, тогда trainNetwork использует Weights свойство как начальное значение. Если на Weights свойство пустое, тогда trainNetwork использует инициализатор, заданный как WeightsInitializer свойство слоя.

Во время обучения Weights является OutputSize-by- InputSize матрица.

Типы данных: single | double

Смещения слоя, заданные как матрица.

Смещения слоя являются настраиваемыми параметрами. При обучении сети, если Bias непусто, тогда trainNetwork использует Bias свойство как начальное значение. Если Bias пуст, тогда trainNetwork использует инициализатор, заданный как BiasInitializer.

Во время обучения Bias является OutputSize-by- 1 матрица.

Типы данных: single | double

Темп обучения и регуляризация

Коэффициент скорости обучения для весов, заданный как неотрицательный скаляр.

Программа умножает этот коэффициент на глобальный темп обучения, чтобы определить скорость обучения для весов на этом слое. Для примера, если WeightLearnRateFactor равен 2, тогда скорость обучения для весов на этом слое в два раза превышает текущую глобальную скорость обучения. Программа определяет глобальную скорость обучения на основе настроек, заданных в trainingOptions функция.

Пример: 2

Коэффициент скорости обучения для смещений, заданный как неотрицательный скаляр.

Программа умножает этот коэффициент на глобальную скорость обучения, чтобы определить скорость обучения для смещений на этом слое. Для примера, если BiasLearnRateFactor равен 2, тогда скорость обучения для смещений в слое в два раза превышает текущую глобальную скорость обучения. Программа определяет глобальную скорость обучения на основе настроек, заданных в trainingOptions функция.

Пример: 2

L2 регуляризации для весов, заданный как неотрицательный скаляр.

Программа умножает этот коэффициент на глобальный коэффициент регуляризации L2, чтобы определить L2 регуляризацию для весов на этом слое. Для примера, если WeightL2Factor равен 2, тогда L2 регуляризация для весов в этом слое в два раза превышает глобальный коэффициент регуляризации L2. Можно задать глобальный коэффициент регуляризации L2 с помощью trainingOptions функция.

Пример: 2

L2 регуляризации для смещений, заданный как неотрицательный скаляр.

Программа умножает этот коэффициент на глобальный коэффициент регуляризации L2, чтобы определить L2 регуляризацию для смещений на этом слое. Для примера, если BiasL2Factor равен 2, тогда L2 регуляризация для смещений в этом слое в два раза превышает глобальный коэффициент регуляризации L2. Можно задать глобальный коэффициент регуляризации L2 с помощью trainingOptions функция.

Пример: 2

Слой

Имя слоя, заданное как вектор символов или строковый скаляр. Чтобы включить слой в график слоев, необходимо задать непустое уникальное имя слоя. Если вы обучаете последовательную сеть с слоем и Name установлено в ''затем программа автоматически присваивает слою имя во время обучения.

Типы данных: char | string

Количество входов слоя. Этот слой принимает только один вход.

Типы данных: double

Входные имена слоя. Этот слой принимает только один вход.

Типы данных: cell

Количество выходов слоя. Этот слой имеет только один выход.

Типы данных: double

Выходные имена слоя. Этот слой имеет только один выход.

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

Подробнее о

расширить все

Вопросы совместимости

расширить все

Поведение изменено в R2019a

Ссылки

[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).

Расширенные возможности

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.

Генерация кода GPU
Сгенерируйте код CUDA ® для графических процессоров NVIDIA ® с помощью GPU Coder™

.
Введенный в R2016a