Керас - Слои

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

Введение

Слой Keras требует shape of the input (input_shape) чтобы понять структуру входных данных, initializerчтобы установить вес для каждого входа и, наконец, активаторы, чтобы преобразовать выход, чтобы сделать его нелинейным. Между ними, ограничения ограничивают и определяют диапазон, в котором должен быть сгенерирован вес входных данных, и регуляризатор попытается оптимизировать слой (и модель), динамически применяя штрафы к весам в процессе оптимизации.

Подводя итог, слой Keras требует ниже минимального количества деталей для создания полного слоя.

  • Форма входных данных
  • Количество нейронов / единиц в слое
  • Initializers
  • Regularizers
  • Constraints
  • Activations

Давайте разберемся с основной концепцией в следующей главе. Прежде чем понять основную концепцию, давайте создадим простой слой Keras с использованием API последовательной модели, чтобы понять, как работают модель и слой Keras.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 
from keras import regularizers 
from keras import constraints 

model = Sequential() 

model.add(Dense(32, input_shape=(16,), kernel_initializer = 'he_uniform', 
   kernel_regularizer = None, kernel_constraint = 'MaxNorm', activation = 'relu')) 
model.add(Dense(16, activation = 'relu')) 
model.add(Dense(8))

где,

  • Line 1-5 импортирует необходимые модули.

  • Line 7 создает новую модель с использованием последовательного API.

  • Line 9 создает новый Dense слой и добавьте его в модель. Dense- это уровень начального уровня, предоставляемый Keras, который принимает количество нейронов или единиц (32) в качестве обязательного параметра. Если слой является первым слоем, то нам нужно предоставитьInput Shape, (16,)также. В противном случае выходные данные предыдущего слоя будут использоваться как входные данные следующего слоя. Все остальные параметры необязательны.

    • Первый параметр представляет количество единиц (нейронов).

    • input_shape представляют форму входных данных.

    • kernel_initializer представляют собой инициализатор, который будет использоваться. he_uniform функция устанавливается как значение.

    • kernel_regularizer представлять regularizerбыть использованным. Ни один не установлен в качестве значения.

    • kernel_constraint представляют ограничение, которое будет использоваться. MaxNorm функция устанавливается как значение.

    • activationпредставляют активацию, которая будет использоваться. функция relu устанавливается как значение.

  • Line 10 создает второй Dense слой с 16 единицами и набор relu в качестве функции активации.

  • Line 11 создает последний плотный слой с 8 единицами.

Основная концепция слоев

Давайте поймем основную концепцию слоя, а также то, как Keras поддерживает каждую концепцию.

Форма ввода

В машинном обучении все типы входных данных, такие как текст, изображения или видео, сначала преобразуются в массив чисел, а затем передаются в алгоритм. Входные числа могут быть одномерным массивом, двумерным массивом (матрицей) или многомерным массивом. Мы можем указать размерную информацию, используяshape, набор целых чисел. Например,(4,2) представляют собой матрицу с четырьмя строками и двумя столбцами.

>>> import numpy as np 
>>> shape = (4, 2) 
>>> input = np.zeros(shape) 
>>> print(input) 
[
   [0. 0.] 
   [0. 0.] 
   [0. 0.] 
   [0. 0.]
] 
>>>

Так же, (3,4,2) трехмерная матрица, имеющая три набора матриц 4x2 (две строки и четыре столбца).

>>> import numpy as np 
>>> shape = (3, 4, 2) 
>>> input = np.zeros(shape) 
>>> print(input)
[
   [[0. 0.] [0. 0.] [0. 0.] [0. 0.]] 
   [[0. 0.] [0. 0.] [0. 0.] [0. 0.]] 
   [[0. 0.] [0. 0.] [0. 0.] [0. 0.]]
]
>>>

Для создания первого слоя модели (или входного слоя модели) необходимо указать форму входных данных.

Инициализаторы

В машинном обучении всем входным данным будет присвоен вес. InitializersМодуль предоставляет различные функции для установки начального веса. Несколько изKeras Initializer функции следующие -

Нули

Генерирует 0 для всех входных данных.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.Zeros() 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

Где, kernel_initializer представляют собой инициализатор ядра модели.

Единицы

Генерирует 1 для всех входных данных.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.Ones() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

Постоянный

Создает постоянное значение (скажем, 5) указывается пользователем для всех входных данных.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.Constant(value = 0) model.add(
   Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init)
)

где, value представляют постоянное значение

Случайный Нормальный

Создает значение, используя нормальное распределение входных данных.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.RandomNormal(mean=0.0, 
stddev = 0.05, seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

где,

  • mean представляют собой среднее значение случайных значений для генерации

  • stddev представляют собой стандартное отклонение случайных значений для генерации

  • seed представляют значения для генерации случайного числа

СлучайнаяУниформа

Создает значение, используя равномерное распределение входных данных.

from keras import initializers 

my_init = initializers.RandomUniform(minval = -0.05, maxval = 0.05, seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

где,

  • minval представляют нижнюю границу случайных значений для генерации

  • maxval представляют верхнюю границу случайных значений для генерации

Усеченный Нормальный

Создает значение с использованием усеченного нормального распределения входных данных.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.TruncatedNormal(mean = 0.0, stddev = 0.05, seed = None
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

VarianceScaling

Создает значение на основе формы ввода и формы вывода слоя с заданным масштабом.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.VarianceScaling(
   scale = 1.0, mode = 'fan_in', distribution = 'normal', seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   skernel_initializer = my_init))

где,

  • scale представляют коэффициент масштабирования

  • mode представлять любой из fan_in, fan_out и fan_avg значения

  • distribution представляют любой из normal или же uniform

VarianceScaling

Он находит stddev значение для нормального распределения, используя формулу ниже, а затем найдите веса, используя нормальное распределение,

stddev = sqrt(scale / n)

где n представлять,

  • количество единиц ввода для режима = fan_in

  • количество выходных блоков для режима = fan_out

  • среднее количество блоков ввода и вывода для режима = fan_avg

Точно так же он находит предел для равномерного распределения, используя формулу ниже, а затем находит веса, используя равномерное распределение,

limit = sqrt(3 * scale / n)

lecun_normal

Создает значение с использованием нормального распределения входных данных lecun.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.RandomUniform(minval = -0.05, maxval = 0.05, seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

Он находит stddev используя приведенную ниже формулу, а затем примените нормальное распределение

stddev = sqrt(1 / fan_in)

где, fan_in представляют количество входных единиц.

lecun_uniform

Создает значение, используя равномерное распределение входных данных lecun.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.lecun_uniform(seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

Он находит limit используя формулу ниже, а затем примените равномерное распределение

limit = sqrt(3 / fan_in)

где,

  • fan_in представляет количество входных единиц

  • fan_out представляет количество единиц вывода

glorot_normal

Создает значение, используя обычное распределение входных данных.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.glorot_normal(seed=None) model.add(
   Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init)
)

Он находит stddev используя приведенную ниже формулу, а затем примените нормальное распределение

stddev = sqrt(2 / (fan_in + fan_out))

где,

  • fan_in представляет количество входных единиц

  • fan_out представляет количество единиц вывода

glorot_uniform

Создает значение, используя равномерное распределение входных данных.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.glorot_uniform(seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

Он находит limit используя формулу ниже, а затем примените равномерное распределение

limit = sqrt(6 / (fan_in + fan_out))

где,

  • fan_in представляют количество входных единиц.

  • fan_out представляет количество единиц вывода

he_normal

Генерирует значение, используя нормальное распределение входных данных.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.RandomUniform(minval = -0.05, maxval = 0.05, seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

Он находит стандартное отклонение, используя формулу ниже, а затем применяет нормальное распределение.

stddev = sqrt(2 / fan_in)

где, fan_in представляют количество входных единиц.

he_uniform

Создает значение, используя равномерное распределение входных данных.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.he_normal(seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

Он находит limit используя приведенную ниже формулу, а затем примените равномерное распределение.

limit = sqrt(6 / fan_in)

где, fan_in представляют количество входных единиц.

Ортогональный

Создает случайную ортогональную матрицу.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.Orthogonal(gain = 1.0, seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

где, gain представляют коэффициент умножения матрицы.

Идентичность

Создает единичную матрицу.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.Identity(gain = 1.0) model.add(
   Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init)
)

Ограничения

В машинном обучении на этапе оптимизации будет установлено ограничение на параметр (вес). <> Модуль ограничений предоставляет различные функции для установки ограничения на слой. Некоторые из функций ограничений следующие.

NonNeg

Ограничивает веса неотрицательными.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.Identity(gain = 1.0) model.add(
   Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init)
)

где, kernel_constraint представляют ограничение, которое будет использоваться в слое.

UnitNorm

Ограничивает веса как единичную норму.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import constraints 

my_constrain = constraints.UnitNorm(axis = 0) 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_constraint = my_constrain))

MaxNorm

Ограничивает вес нормой, меньшей или равной заданному значению.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import constraints 

my_constrain = constraints.MaxNorm(max_value = 2, axis = 0) 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_constraint = my_constrain))

где,

  • max_value представляют верхнюю границу

  • ось представляет собой измерение, в котором должно применяться ограничение. например, в фигуре (2,3,4) ось 0 обозначает первое измерение, 1 обозначает второе измерение и 2 обозначает третье измерение

МинМаксНорм

Ограничивает веса нормой между указанными минимальным и максимальным значениями.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import constraints 

my_constrain = constraints.MinMaxNorm(min_value = 0.0, max_value = 1.0, rate = 1.0, axis = 0) 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_constraint = my_constrain))

где, rate представляют скорость, с которой применяется ограничение веса.

Регуляризаторы

В машинном обучении регуляризаторы используются на этапе оптимизации. Он накладывает некоторые штрафы на параметр слоя во время оптимизации. Модуль регуляризации Keras предоставляет следующие функции для установки штрафов на уровне. Регуляризация применяется только для каждого уровня.

Регуляризатор L1

Он обеспечивает регуляризацию на основе L1.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import regularizers 

my_regularizer = regularizers.l1(0.) 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_regularizer = my_regularizer))

где, kernel_regularizer представляют скорость, с которой применяется ограничение веса.

Регуляризатор L2

Он обеспечивает регуляризацию на основе L2.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import regularizers 

my_regularizer = regularizers.l2(0.) 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_regularizer = my_regularizer))

Регуляризатор L1 и L2

Он обеспечивает регуляризацию на основе L1 и L2.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import regularizers 

my_regularizer = regularizers.l2(0.) 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,),
   kernel_regularizer = my_regularizer))

Активации

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

Как вы помните концепцию единичного восприятия, выход перцептрона (нейрона) - это просто результат функции активации, которая принимает суммирование всех входных данных, умноженных на соответствующий вес плюс общее смещение, если таковое имеется.

result = Activation(SUMOF(input * weight) + bias)

Итак, функция активации играет важную роль в успешном обучении модели. Keras предоставляет множество функций активации в модуле активации. Давайте узнаем все активации, доступные в модуле.

линейный

Применяет линейную функцию. Ничего не делает.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'linear', input_shape = (784,)))

Где, activationотносится к функции активации слоя. Его можно указать просто по имени функции, и слой будет использовать соответствующие активаторы.

ускользать

Применяет экспоненциальную линейную единицу.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'elu', input_shape = (784,)))

селу

Применяет масштабную экспоненциальную линейную единицу.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'selu', input_shape = (784,)))

relu

Применяет выпрямленную линейную единицу.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,)))

softmax

Применяет функцию Softmax.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'softmax', input_shape = (784,)))

softplus

Применяет функцию Softplus.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'softplus', input_shape = (784,)))

софтсайн

Применяет функцию Softsign.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'softsign', input_shape = (784,)))

танх

Применяет функцию гиперболического тангенса.

from keras.models import Sequential 
from keras.layers import Activation, Dense 
model = Sequential() 
model.add(Dense(512, activation = 'tanh', input_shape = (784,)))

сигмовидный

Применяет сигмовидную функцию.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'sigmoid', input_shape = (784,)))

жесткий_сигмоид

Применяет жесткую сигмовидную функцию.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'hard_sigmoid', input_shape = (784,)))

экспоненциальный

Применяет экспоненциальную функцию.

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'exponential', input_shape = (784,)))
Старший Нет Слои и описание
1

Плотный слой

Dense layer - регулярный слой нейронной сети с глубокими связями.

2

Слои исключения

Dropout - одна из важных концепций машинного обучения.

3

Сглаживание слоев

Flatten используется для сглаживания ввода.

4

Изменить форму слоев

Reshape используется для изменения формы ввода.

5

Перестановка слоев

Permute также используется для изменения формы ввода с помощью шаблона.

6

Слои RepeatVector

RepeatVector используется для повторения ввода заданного числа n раз.

7

Лямбда-слои

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

8

Слои свертки

Keras содержит множество слоев для создания ИНС на основе свертки, обычно называемой нейронной сетью свертки (CNN) .

9

Уровень объединения

Он используется для выполнения максимальных операций объединения временных данных.

10

Локально связанный слой

Локально связанные слои похожи на слой Conv1D, но разница в том, что веса слоя Conv1D являются общими, но здесь веса не разделяются.

11

Слить слой

Он используется для объединения списка входов.

12

Встраиваемый слой

Он выполняет операции встраивания во входной слой.