Слои Keras: параметры и свойства / keras 5

219

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

Слои Keras

Для определения или создания слоя Keras нужна следующая информация:

  • Форма ввода: для понимания структуры входящей информации
  • Количество: для определения количества узлов/нейронов в слое
  • Инициализатор: для определения весов каждого входа, что важно для выполнения вычислений
  • Активаторы: для преобразования входных данных в нелинейный формат, чтобы каждый нейрон мог обучаться эффективнее
  • Ограничители: для наложения ограничений на веса при оптимизации
  • Регуляторы: для применения штрафов к параметрам во время оптимизации

Различные слои в Keras

Основные слои Keras

Dense

Вычисляет вывод следующим образом:

output=activation(dot(input,kernel)+bias)

Здесь activation — это активатор, а kernel — взвешенная матрица, применяемая к входящим тензорам. bias — это константа, помогающая настроить модель наилучшим образом.

Dense-слой получает информацию со всех узлов предыдущего слоя. Вот его аргументы и значения по умолчанию:

Dense(units, activation=NULL, use_bias=TRUE,kernel_initializer='glorot_uniform',
bias_regularizer=NULL, activity_regularizer=NULL,
kernel_constraint=NULL, bias_constrain=NULL)

Activation

Используется для применения функции активации к выводу. То же самое, что передача активации в Dense-слой. Имеет следующие аргументы:

Activation(activation_function)

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

Dropout

Dropout применяется в нейронных сетях для решения проблемы переобучения. Для этого он случайным образом выбирает доли единиц и при каждом обновлении назначает им значение 0.

Аргументы:

Dropout(rate, noise_shape=NULL, seed=NULL)

Flatten

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

Например, входящий слой размерности (batch_size, 3,2) «выравнивается» для вывода размерности (batch_size, 6). Он имеет следующие аргументы.

Flatten(data_format=None)

Input

Этот слой используется в Keras для создания модели на основе ввода и вывода модели. Он является точкой входа в модель графа.

Аргументы:

Input(shape, batch_shape, name, dtype, 
      sparse=FALSE,tensor=NULL)

Reshape

Изменить вывод под конкретную размерность

Аргумент:

Reshape(target_shape)

Выдаст следующий результат:

(batch_size,)+ target_shape

Permute

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

Аргументы:

Permute(dims)

Lambda

Слои Lambda используются для создания дополнительных признаков слоев, которых нет в Keras.

Аргументы:

Lambda(lambda_fun,output_shape=None, mask=None, arguments=None)

Masking

Пропустить временной промежуток, если все признаки равны mask_value.

Аргументы:

Masking(mask_value=0.0)

Сверточные сети Keras

Conv1D и Conv2D

Здесь определяется взвешенное ядро. Производится операция свертки, результатом которой становятся тензоры.

Аргументы:

Conv1D(filters,kernel_size,strides=1, padding='valid', 
data_format='channels_last', dilation_rate=1, activation=None, 
use_bias=True, kernel_initializer='glorot_uniform', 
bias_initializer='zeros', kernel_regularizer=None, 
bias_regularizer=None, activity_regularizer=None, 
kernel_constraint=None, bias_constraint=None)

Conv2D(filters,kernel_size,strides=(1,1) , padding='valid', 
data_format='channels_last', dilation_rate=(1,1) , 
activation=None, use_bias=True, 
kernel_initializer='glorot_uniform', bias_initializer='zeros', 
kernel_regularizer=None, bias_regularizer=None, 
activity_regularizer=None, kernel_constraint=None, 
bias_constraint=None)

Слои пулинга (подвыборки)

Они используются для уменьшения размера ввода и извлечения важной информации.

MaxPooling1D и MaxPooling2D

Извлекаем максимум

Аргументы:

MaxPooling1D(pool_size=2, strides=None, padding='valid', 
data_format='channels_last')

MaxPooling2D(pool_size=(2,2), strides=None, padding='valid', 
data_format='channels_last')

AveragePooling1D и AveragePooling2D

Извлекаем среднее

Аргументы:

AveragePooling1D(pool_size=2, strides=None, padding='valid', 
data_format='channels_last')

AveragePooling1D(pool_size=(2,2), strides=None, padding='valid',
data_format=None)

Рекуррентный слой

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

SimpleRNN

Это полностью связанная RNN (рекуррентная нейронная сеть), где вывод подается обратно в качестве входящих данных

Аргументы:

SimpleRNN(units, activation, use_bias, kernel_initializer, 
recurrent_initializer, bias_initializer, kernel_regularizer, 
recurrent_regularizer, bias_regularizer, activity_regularizer, 
kernel_constraint, recurrent_constraint, bias_constraint, 
dropout, recurrent_dropout, return_sequences, return_state)

LSTM

Это увеличенная форма RNN с хранилищем для информации.

LSTM(units, activation , recurrent_activation, use_bias, 
kernel_initializer, recurrent_initializer, bias_initializer, 
unit_forget_bias, kernel_regularizer, recurrent_regularizer, 
bias_regularizer, activity_regularizer, kernel_constraint, 
recurrent_constraint, bias_constraint, dropout, 
recurrent_dropout, implementation, return_sequences, 
return_state)

В Keras есть и другие слои, но чаще всего используются описанные выше.

Выводы

Этот материал посвящен концепции слоев в моделях Keras. Вы узнали о требованиях для построения слоя, а также об их типах: основные слои, сверточные слои, подвыборки, рекуррентные слои, а также их свойства и параметры.

Тест на знание python

Что выведет этот код?
Что выведет этот код?
Какой будет результат выполнения этого кода?
Что вернет следующий код?
Как в Python называется встроенная библиотека для использования регулярных выражений?
Александр
Я создал этот блог в 2018 году, чтобы распространять полезные учебные материалы, документации и уроки на русском. На сайте опубликовано множество статей по основам python и библиотекам, уроков для начинающих и примеров написания программ. Пишу на популярные темы: веб-разработка, работа с базами данных, data sciense и другие...