卷积神经网络(Convolutional Neural Network, CNN)是一种 feed-forward 神经网络,它具有以下特点:
- 卷积层:使用卷积核对输入数据进行卷积操作,可以提取空间特征。
- 池化层:使用最大池化或平均池化降维,可以提高模型鲁棒性。
- 全连接层:最后使用传统全连接层进行分类或回归。
CNN在机器学习中的主要应用是:
- 图像分类:CNN可以自动学习图像的空间特征,用于图像的分类和识别,如LeNet、VGGNet、ResNet等。
- 物体检测:使用卷积实现特征提取和滑动窗口,用于检测图像中的物体,如Fast R-CNN、YOLO等。
- 语义分割:通过卷积提取特征并使用 transpose convolution 上采样,可以实现像素级的分类,用于语义分割。
- 目标跟踪:连续视频帧中跟踪特定目标,需要卷积网络提取视频帧特征和目标模型。
- 图像生成:使用卷积神经网络(通常是 Generator )生成新图像,如GAN和VAE。
CNN的主要层类型包括:
- 卷积层(Convolutional Layer):使用卷积核提取特征。
- 池化层(Pooling Layer):使用最大值池化或平均值池化进行降维。
- 全连接层(Fully Connected Layer):进行分类或回归。
- 激活函数层(Activation Layer):如ReLU层。
- 批量归一化层(Batch Normalization Layer):加速训练和提高精度。
代码示例:
python
# 卷积层
conv1 = Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))
# 池化层
pool1 = MaxPool2D(pool_size=(2, 2))
# 全连接层
dense1 = Dense(128, activation='relu')
dense2 = Dense(10, activation='softmax')
# 构建CNN模型
model = Sequential()
model.add(conv1)
model.add(pool1)
model.add(flatten)
model.add(dense1)
model.add(dense2)
# 编译和训练模型
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5, batch_size=32)