Распространённые типы слоёв в Keras
Keras — это высокоуровневый API нейронных сетей, предоставляющий широкий выбор типов слоёв для построения моделей глубокого обучения.
Слой — это базовый строительный блок Keras. Каждый слой получает входные данные, выполняет определённое преобразование и выводит результат.
В этой статье подробно описаны наиболее часто используемые типы слоёв в Keras и их применение.
Основные типы слоёв
Полносвязный слой Dense
Полносвязный слой — это самый базовый слой нейронной сети, в котором каждый входной узел соединён с каждым выходным узлом.
Пример
# Создать полносвязный слой с 64 нейронами, используя функцию активации ReLU
dense_layer = Dense(units=64, activation='relu')
Описание параметра:
units: положительное целое число, размерность выходного пространстваactivation: функция активации, такая как 'relu', 'sigmoid', 'tanh', 'softmax' и т. д.use_bias: логическое значение, использовать ли вектор смещения (по умолчанию True)kernel_initializer: метод инициализации для матрицы весов
Сценарии применения:
- Используется в многослойных перцептронах (MLP)
- В качестве последнего слоя классификатора
- Преобразование признаков и нелинейное отображение
Conv2D 2D-свёрточный слой
В основном используется для операций свёртки при обработке изображений, способен извлекать локальные признаки.
Пример
# Создать сверточный слой с 32 ядрами свертки 3x3
conv_layer = Conv2D(filters=32, kernel_size=(3, 3), activation='relu')
Описание параметра:
filters: целое число, размерность выходного пространства (количество ядер свертки)kernel_size: целое число или кортеж, ширина и высота окна сверткиstrides: шаг свертки, по умолчанию (1, 1)padding: 'valid' (без дополнения) или 'same' (с дополнением, чтобы выход имел тот же размер, что и вход)
Сценарии применения:
- Классификация изображений
- Обнаружение объектов
- Сегментация изображений
Слой 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, чтобы предотвратить переобучение.
Пример
# Создайте слой Dropout с коэффициентом dropout 0.5
dropout_layer = Dropout(rate=0.5)
Описание параметра:
rate: число с плавающей запятой от 0 до 1, коэффициент отсеваnoise_shape: целочисленный тензор, представляющий форму бинарной маски dropout, которая будет умножена на входseed: начальное значение генератора случайных чисел
Сценарии применения:
- Предотвращение переобучения нейронной сети
- Улучшение обобщающей способности модели
- Обычно используется после полносвязных слоёв
Другие важные типы слоёв
BatchNormalization Слой пакетной нормализации
Выполняет пакетную нормализацию выходных данных предыдущего слоя, ускоряя обучение и повышая стабильность модели.
Пример
# Создать слой пакетной нормализации
bn_layer = BatchNormalization()
MaxPooling2D Слой 2D максимального пулинга
Уменьшает размер карты признаков, беря максимальное значение в окне.
Пример
# Создать слой максимального пулинга 2x2
pool_layer = MaxPooling2D(pool_size=(2, 2))
Слой Flatten
Выравнивает многомерный вход в одно измерение, обычно используется для перехода от сверточных слоев к полносвязным слоям.
Пример
# Создать слой выравнивания
flatten_layer = Flatten()
Слой Embedding
Преобразует положительные целые числа (индексы) в плотные векторы фиксированного размера.
Пример
# Создать слой эмбеддинга с размером словаря 1000 и размерностью выхода 64
embedding_layer = Embedding(input_dim=1000, output_dim=64)
Пример комбинирования слоёв
Пример
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')
])
Рекомендации по выбору слоёв
Тип входных данных:
- Данные изображений: Conv2D + слои пулинга
- Данные последовательностей: LSTM/GRU
- Структурированные данные: слои Dense
Глубина модели:
- Глубокие сети необходимо сочетать с BatchNormalization и Dropout
Тип задачи:
- Задача классификации: используйте активацию softmax в последнем слое
- Задача регрессии: не используйте функцию активации или используйте линейную активацию в последнем слое
Вычислительные ресурсы:
- Для входных данных большого размера рассмотрите использование слоев пулинга для уменьшения количества параметров
- При ограниченных ресурсах уменьшите количество слоев и нейронов