结合tensorflow实现卷积神经网络手写数字识别代码
时间: 2024-10-24 17:16:29 浏览: 50
在TensorFlow中实现卷积神经网络(Convolutional Neural Network, CNN)用于手写数字识别是一个常见的机器学习任务。以下是一个简单的例子,使用MNIST数据集,它包含了60,000个训练样本和10,000个测试样本:
```python
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
# 加载MNIST数据集
(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()
# 数据预处理
train_images = train_images / 255.0
test_images = test_images / 255.0
train_images = train_images[..., tf.newaxis]
test_images = test_images[..., tf.newaxis] # 添加通道维度
# 构建CNN模型
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten()) # 展平卷积层
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10)) # 输出层,10个类别对应数字0-9
# 编译模型
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
# 训练模型
history = model.fit(train_images, train_labels, epochs=5, validation_data=(test_images, test_labels))
# 测试模型性能
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print(f'Test accuracy: {test_acc}')
# 相关问题--
1. 这段代码如何利用了CNN的特点?
2. 模型的优化器和损失函数是如何选择的?
3. 为什么需要对训练数据进行归一化处理?
阅读全文