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
。 - 序列任务:
LSTM
或GRU
+Embedding
+LayerNormalization
。 - 分类/回归:
Dense
+Dropout
+Activation
。 - 正则化:优先使用
Dropout
和BatchNormalization
。
10. 总结
Keras 提供多样化的层类型,覆盖从基础全连接到复杂卷积、循环网络和正则化需求。结合 Sequential
或 Functional API,可以快速构建复杂模型。每个层都支持灵活配置,满足不同任务需求。
如果你需要某个层的深入讲解(比如 Conv2D
的超参数调优)、具体任务示例,或想生成图表(如模型结构可视化),请告诉我!