Keras 常用层类型
Keras 是一个高级神经网络 API,它提供了丰富的层类型来构建深度学习模型。
层(Layer)是 Keras 的基本构建块,每个层接收输入数据,进行特定变换后输出结果。
本文将详细介绍 Keras 中最常用的层类型及其使用方法。
核心层类型
Dense 全连接层
全连接层是最基础的神经网络层,每个输入节点都与输出节点相连。
实例
from keras.layers import Dense
# 创建一个具有64个神经元,使用ReLU激活函数的全连接层
dense_layer = Dense(units=64, activation='relu')
# 创建一个具有64个神经元,使用ReLU激活函数的全连接层
dense_layer = Dense(units=64, activation='relu')
参数说明:
units
:正整数,输出空间的维度activation
:激活函数,如 'relu', 'sigmoid', 'tanh', 'softmax' 等use_bias
:布尔值,是否使用偏置向量(默认True)kernel_initializer
:权重矩阵的初始化方法
应用场景:
- 用于多层感知机(MLP)
- 作为分类器的最后一层
- 特征变换和非线性映射
Conv2D 二维卷积层
主要用于图像处理的卷积操作,能够提取局部特征。
实例
from keras.layers import Conv2D
# 创建一个具有32个3x3卷积核的卷积层
conv_layer = Conv2D(filters=32, kernel_size=(3, 3), activation='relu')
# 创建一个具有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
# 创建一个具有128个单元的LSTM层
lstm_layer = LSTM(units=128, return_sequences=True)
# 创建一个具有128个单元的LSTM层
lstm_layer = LSTM(units=128, return_sequences=True)
参数说明:
units
:正整数,输出空间的维度return_sequences
:布尔值,是否返回完整序列(默认False)dropout
:0到1之间的浮点数,输入线性变换的丢弃率recurrent_dropout
:0到1之间的浮点数,循环状态的丢弃率
应用场景:
- 自然语言处理
- 时间序列预测
- 语音识别
Dropout 随机失活层
在训练过程中随机将部分神经元输出设为0,防止过拟合。
实例
from keras.layers import Dropout
# 创建一个丢弃率为0.5的Dropout层
dropout_layer = Dropout(rate=0.5)
# 创建一个丢弃率为0.5的Dropout层
dropout_layer = Dropout(rate=0.5)
参数说明:
rate
:0到1之间的浮点数,丢弃比例noise_shape
:整数张量,表示将与输入相乘的二进制丢弃掩层的形状seed
:随机数种子
应用场景:
- 防止神经网络过拟合
- 提高模型泛化能力
- 通常在全连接层后使用
其他重要层类型
BatchNormalization 批量归一化层
对前一层的输出进行批量归一化,加速训练并提高模型稳定性。
实例
from keras.layers import BatchNormalization
# 创建批量归一化层
bn_layer = BatchNormalization()
# 创建批量归一化层
bn_layer = BatchNormalization()
MaxPooling2D 二维最大池化层
通过取窗口内的最大值来下采样特征图。
实例
from keras.layers import MaxPooling2D
# 创建2x2的最大池化层
pool_layer = MaxPooling2D(pool_size=(2, 2))
# 创建2x2的最大池化层
pool_layer = MaxPooling2D(pool_size=(2, 2))
Flatten 展平层
将多维输入展平为一维,常用于从卷积层过渡到全连接层。
实例
from keras.layers import Flatten
# 创建展平层
flatten_layer = Flatten()
# 创建展平层
flatten_layer = Flatten()
Embedding 嵌入层
将正整数(索引)转换为固定大小的密集向量。
实例
from keras.layers import Embedding
# 创建嵌入层,词汇表大小为1000,输出维度为64
embedding_layer = Embedding(input_dim=1000, output_dim=64)
# 创建嵌入层,词汇表大小为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')
])
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激活
- 回归任务:最后一层不使用激活函数或使用线性激活
计算资源:
- 大尺寸输入考虑使用池化层减少参数
- 资源有限时减少层数和单元数
点我分享笔记