编写一个二维卷积神经网络python代码
时间: 2025-06-16 16:22:37 浏览: 11
### 使用 Keras 构建二维卷积神经网络(CNN)
以下是一个完整的基于 Keras 的二维卷积神经网络(CNN)代码示例,适用于图像分类任务。该 CNN 结构包括输入层、多个卷积层、激活层、池化层、全连接层和输出层。
#### 数据准备
假设我们正在处理 MNIST 手写数字数据集,这是一个经典的图像分类问题。MNIST 数据集中每张图片大小为 28×28 像素,属于灰度图。
```python
import numpy as np
from tensorflow.keras import datasets, layers, models
from tensorflow.keras.utils import to_categorical
# 加载并预处理 MNIST 数据集
(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1)).astype('float32') / 255
test_images = test_images.reshape((10000, 28, 28, 1)).astype('float32') / 255
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
```
#### 定义 CNN 模型
下面定义了一个简单的 CNN 模型,包含两个卷积层、ReLU 激活函数、最大池化层以及一个全连接层。
```python
model = models.Sequential()
# 添加第一个卷积层和 ReLU 激活函数
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
# 添加最大池化层
model.add(layers.MaxPooling2D((2, 2)))
# 添加第二个卷积层和 ReLU 激活函数
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
# 添加另一个最大池化层
model.add(layers.MaxPooling2D((2, 2)))
# 添加第三个卷积层和 ReLU 激活函数
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
# 展平操作以便于后续的全连接层
model.add(layers.Flatten())
# 添加全连接层
model.add(layers.Dense(64, activation='relu'))
# 输出层,使用 softmax 激活函数进行多类别分类
model.add(layers.Dense(10, activation='softmax'))
```
#### 编译模型
指定优化器、损失函数和评估指标。
```python
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
```
#### 训练模型
设置训练轮数(epochs)和批量大小(batch size),开始训练过程。
```python
history = model.fit(train_images, train_labels, epochs=5, batch_size=64, validation_split=0.1)
```
#### 测试模型性能
利用测试集验证模型的表现。
```python
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print(f'\nTest accuracy: {test_acc}')
```
---
### 关键点解析
- **卷积层**:负责提取局部特征[^1]。
- **池化层**:降低维度,减少参数数量,防止过拟合[^1]。
- **激活函数**:引入非线性变换,增强模型表达能力。这里选择了常用的 ReLU 和 Softmax 函数[^3]。
- **全连接层**:将前面各层提取到的空间层次特征映射至样本标记空间。
---
阅读全文
相关推荐


















