Keras 常用层类型

Keras 常用层类型

Keras 是 TensorFlow 2.x 的高级 API,提供了多种层类型,用于构建神经网络模型。这些层涵盖了从基本全连接到复杂的卷积、循环神经网络等功能,适用于图像处理、自然语言处理、时间序列等多种任务。以下是 Keras 中常用的层类型,包含功能描述、典型用法和代码示例,简洁明了,适合初学者和快速参考。


1. 核心层(Core Layers)

这些是构建神经网络的基础层,广泛用于各种模型。

Dense(全连接层)

  • 功能:每个输入神经元与所有输出神经元连接,适合线性变换。
  • 参数
  • units:输出神经元数量。
  • activation:激活函数(如 'relu', 'sigmoid', 'softmax')。
  • 应用:分类、回归、隐藏层。
  • 示例
  from tensorflow.keras import layers
  layer = layers.Dense(units=64, activation='relu', input_shape=(100,))

Flatten

  • 功能:将多维输入展平为一维向量,常用于图像到全连接层的转换。
  • 应用:处理图像或多维数据。
  • 示例
  layer = layers.Flatten(input_shape=(28, 28))  # 将 28x28 展平为 784 维

Dropout

  • 功能:随机丢弃一定比例的神经元,防止过拟合。
  • 参数rate(丢弃比例,如 0.2 表示 20%)。
  • 应用:正则化。
  • 示例
  layer = layers.Dropout(rate=0.2)

Input

  • 功能:定义模型输入的形状,通常与 Functional API 或 Model 子类化一起使用。
  • 应用:明确模型输入。
  • 示例
  from tensorflow.keras import Input
  input_layer = Input(shape=(28, 28))

2. 卷积层(Convolutional Layers)

适用于图像和空间数据,常见于计算机视觉任务。

Conv2D

  • 功能:二维卷积,提取图像的空间特征。
  • 参数
  • filters:卷积核数量。
  • kernel_size:卷积核大小(如 (3, 3))。
  • strides:步幅。
  • padding'valid'(无填充)或 'same'(保持输出尺寸)。
  • activation:激活函数。
  • 应用:图像分类、目标检测。
  • 示例
  layer = layers.Conv2D(filters=32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1))

MaxPooling2D / AveragePooling2D

  • 功能:下采样,减少空间维度,提取主要特征。
  • 参数
  • pool_size:池化窗口大小(如 (2, 2))。
  • strides:步幅。
  • 应用:降低计算量、防止过拟合。
  • 示例
  layer = layers.MaxPooling2D(pool_size=(2, 2))

3. 循环神经网络层(Recurrent Layers)

适用于序列数据,如时间序列或自然语言处理。

LSTM

  • 功能:长短期记忆网络,适合长期依赖的序列数据。
  • 参数
  • units:输出维度。
  • return_sequences:是否返回整个序列。
  • 应用:文本生成、时间序列预测。
  • 示例
  layer = layers.LSTM(units=64, return_sequences=True, input_shape=(10, 50))

GRU

  • 功能:门控循环单元,类似 LSTM 但更轻量。
  • 应用:与 LSTM 类似,计算效率更高。
  • 示例
  layer = layers.GRU(units=32, input_shape=(10, 50))

SimpleRNN

  • 功能:基本循环神经网络,适合短序列。
  • 应用:简单序列任务(不推荐用于长序列,因梯度消失问题)。
  • 示例
  layer = layers.SimpleRNN(units=32, input_shape=(10, 50))

4. 嵌入层(Embedding Layer)

  • 功能:将离散输入(如单词索引)映射到密集向量,常见于自然语言处理。
  • 参数
  • input_dim:词汇表大小。
  • output_dim:嵌入向量维度。
  • 应用:文本分类、词嵌入。
  • 示例
  layer = layers.Embedding(input_dim=1000, output_dim=64, input_length=10)

5. 正则化与归一化层

提高模型泛化能力和训练稳定性。

BatchNormalization

  • 功能:对每批数据进行标准化,加速训练并减少内部协变量偏移。
  • 应用:深层网络,卷积或全连接层后。
  • 示例
  layer = layers.BatchNormalization()

LayerNormalization

  • 功能:对每个样本的特征进行标准化,常见于 Transformer 模型。
  • 应用:序列模型。
  • 示例
  layer = layers.LayerNormalization()

6. 激活层(Activation Layers)

单独定义激活函数(也可以内嵌在其他层中)。

Activation

  • 功能:应用激活函数,如 'relu', 'sigmoid', 'tanh'
  • 应用:增加非线性。
  • 示例
  layer = layers.Activation('relu')

7. 其他常用层

GlobalAveragePooling2D

  • 功能:对空间维度取平均值,输出固定大小向量。
  • 应用:替换全连接层,减少参数。
  • 示例
  layer = layers.GlobalAveragePooling2D()

Reshape

  • 功能:改变张量形状(不改变数据)。
  • 应用:调整数据维度。
  • 示例
  layer = layers.Reshape(target_shape=(7, 7, 16))  # 调整为 7x7x16

Concatenate

  • 功能:沿指定轴拼接多个张量。
  • 应用:多输入模型或分支结构。
  • 示例
  layer = layers.Concatenate(axis=-1)  # 沿最后一个轴拼接

8. 示例:组合层构建 CNN

以下是一个使用多种层的卷积神经网络(CNN)示例,用于 MNIST 数据集:

from tensorflow.keras import layers, models

# 构建模型
model = models.Sequential([
    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),  # 卷积层
    layers.MaxPooling2D((2, 2)),                                            # 池化层
    layers.BatchNormalization(),                                            # 归一化
    layers.Conv2D(64, (3, 3), activation='relu'),                           # 第二卷积层
    layers.MaxPooling2D((2, 2)),                                            # 第二池化
    layers.Flatten(),                                                       # 展平
    layers.Dense(128, activation='relu'),                                   # 全连接层
    layers.Dropout(0.5),                                                    # 正则化
    layers.Dense(10, activation='softmax')                                  # 输出层
])

# 编译
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.summary()

输出:显示模型结构,包含各层的参数数量。


9. 选择层的建议

  • 图像任务Conv2D + MaxPooling2D + BatchNormalization + GlobalAveragePooling2D
  • 序列任务LSTMGRU + Embedding + LayerNormalization
  • 分类/回归Dense + Dropout + Activation
  • 正则化:优先使用 DropoutBatchNormalization

10. 总结

Keras 提供多样化的层类型,覆盖从基础全连接到复杂卷积、循环网络和正则化需求。结合 Sequential 或 Functional API,可以快速构建复杂模型。每个层都支持灵活配置,满足不同任务需求。

如果你需要某个层的深入讲解(比如 Conv2D 的超参数调优)、具体任务示例,或想生成图表(如模型结构可视化),请告诉我!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注