Распространённые типы слоёв в Keras

Keras — это высокоуровневый API нейронных сетей, предоставляющий широкий выбор типов слоёв для построения моделей глубокого обучения.

Слой — это базовый строительный блок Keras. Каждый слой получает входные данные, выполняет определённое преобразование и выводит результат.

В этой статье подробно описаны наиболее часто используемые типы слоёв в Keras и их применение.


Основные типы слоёв

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

Полносвязный слой — это самый базовый слой нейронной сети, в котором каждый входной узел соединён с каждым выходным узлом.

Пример

from keras.layers import Dense

# Создать полносвязный слой с 64 нейронами, используя функцию активации ReLU
dense_layer = Dense(units=64, activation='relu')

Описание параметра:

  • units: положительное целое число, размерность выходного пространства
  • activation: функция активации, такая как 'relu', 'sigmoid', 'tanh', 'softmax' и т. д.
  • use_bias: логическое значение, использовать ли вектор смещения (по умолчанию True)
  • kernel_initializer: метод инициализации для матрицы весов

Сценарии применения:

  • Используется в многослойных перцептронах (MLP)
  • В качестве последнего слоя классификатора
  • Преобразование признаков и нелинейное отображение

Conv2D 2D-свёрточный слой

В основном используется для операций свёртки при обработке изображений, способен извлекать локальные признаки.

Пример

from keras.layers import Conv2D

# Создать сверточный слой с 32 ядрами свертки 3x3
conv_layer = Conv2D(filters=32, kernel_size=(3, 3), activation='relu')

Описание параметра:

  • filters: целое число, размерность выходного пространства (количество ядер свертки)
  • kernel_size: целое число или кортеж, ширина и высота окна свертки
  • strides: шаг свертки, по умолчанию (1, 1)
  • padding: 'valid' (без дополнения) или 'same' (с дополнением, чтобы выход имел тот же размер, что и вход)

Сценарии применения:

  • Классификация изображений
  • Обнаружение объектов
  • Сегментация изображений

Слой LSTM с долгой краткосрочной памятью

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

Пример

from keras.layers import LSTM

# Создать слой LSTM с 128 модулями
lstm_layer = LSTM(units=128, return_sequences=True)

Описание параметра:

  • units: положительное целое число, размерность выходного пространства
  • return_sequences: логическое значение, возвращать ли полную последовательность (по умолчанию False)
  • dropout: число с плавающей запятой от 0 до 1, коэффициент dropout для входного линейного преобразования
  • recurrent_dropout: число с плавающей запятой от 0 до 1, коэффициент dropout для рекуррентного состояния

Сценарии применения:

  • Обработка естественного языка
  • Прогнозирование временных рядов
  • Распознавание речи

Слой случайного отключения Dropout

Во время обучения случайным образом устанавливает выход некоторых нейронов в 0, чтобы предотвратить переобучение.

Пример

from keras.layers import Dropout

# Создайте слой Dropout с коэффициентом dropout 0.5
dropout_layer = Dropout(rate=0.5)

Описание параметра:

  • rate: число с плавающей запятой от 0 до 1, коэффициент отсева
  • noise_shape: целочисленный тензор, представляющий форму бинарной маски dropout, которая будет умножена на вход
  • seed: начальное значение генератора случайных чисел

Сценарии применения:

  • Предотвращение переобучения нейронной сети
  • Улучшение обобщающей способности модели
  • Обычно используется после полносвязных слоёв

Другие важные типы слоёв

BatchNormalization Слой пакетной нормализации

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

Пример

from keras.layers import BatchNormalization

# Создать слой пакетной нормализации
bn_layer = BatchNormalization()

MaxPooling2D Слой 2D максимального пулинга

Уменьшает размер карты признаков, беря максимальное значение в окне.

Пример

from keras.layers import MaxPooling2D

# Создать слой максимального пулинга 2x2
pool_layer = MaxPooling2D(pool_size=(2, 2))

Слой Flatten

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

Пример

from keras.layers import Flatten

# Создать слой выравнивания
flatten_layer = Flatten()

Слой Embedding

Преобразует положительные целые числа (индексы) в плотные векторы фиксированного размера.

Пример

from keras.layers import Embedding

# Создать слой эмбеддинга с размером словаря 1000 и размерностью выхода 64
embedding_layer = Embedding(input_dim=1000, output_dim=64)

Пример комбинирования слоёв

Пример

from keras.models import Sequential
from keras.layers import Dense, Dropout, Conv2D, MaxPooling2D, Flatten

# Создать простую модель CNN
model = Sequential([
    Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
    MaxPooling2D((2, 2)),
    Conv2D(64, (3, 3), activation='relu'),
    MaxPooling2D((2, 2)),
    Flatten(),
    Dense(64, activation='relu'),
    Dropout(0.5),
    Dense(10, activation='softmax')
])

Рекомендации по выбору слоёв

  1. Тип входных данных:

    • Данные изображений: Conv2D + слои пулинга
    • Данные последовательностей: LSTM/GRU
    • Структурированные данные: слои Dense
  2. Глубина модели:

    • Глубокие сети необходимо сочетать с BatchNormalization и Dropout
  3. Тип задачи:

    • Задача классификации: используйте активацию softmax в последнем слое
    • Задача регрессии: не используйте функцию активации или используйте линейную активацию в последнем слое
  4. Вычислительные ресурсы:

    • Для входных данных большого размера рассмотрите использование слоев пулинга для уменьшения количества параметров
    • При ограниченных ресурсах уменьшите количество слоев и нейронов
Другие расширения