卷积神经网络实现手写数字图像识别 附代码
时间: 2023-10-11 14:13:05 浏览: 84
下面是一个使用Keras实现手写数字图像识别的CNN示例代码:
```python
import tensorflow as tf
from tensorflow import keras
# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# 将像素值缩放到0-1之间
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
# 将标签转换为one-hot编码
y_train = keras.utils.to_categorical(y_train)
y_test = keras.utils.to_categorical(y_test)
# 定义CNN模型
model = keras.Sequential([
keras.layers.Reshape(target_shape=(28, 28, 1), input_shape=(28, 28)),
keras.layers.Conv2D(filters=32, kernel_size=(3, 3), activation='relu'),
keras.layers.MaxPooling2D(pool_size=(2, 2)),
keras.layers.Conv2D(filters=64, kernel_size=(3, 3), activation='relu'),
keras.layers.MaxPooling2D(pool_size=(2, 2)),
keras.layers.Flatten(),
keras.layers.Dense(units=128, activation='relu'),
keras.layers.Dense(units=10, activation='softmax')
])
# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# 训练模型
model.fit(x_train, y_train, epochs=5, batch_size=32, validation_data=(x_test, y_test))
# 评估模型
test_loss, test_acc = model.evaluate(x_test, y_test)
print('Test accuracy:', test_acc)
```
首先,我们使用Keras加载MNIST数据集,其中包括60000个训练样本和10000个测试样本。然后,我们将像素值缩放到0-1之间,并将标签转换为one-hot编码。
接下来,我们定义了一个包含两个卷积层、两个池化层和两个全连接层的CNN模型。第一个卷积层包含32个3x3的卷积核,第二个卷积层包含64个3x3的卷积核。每个卷积层后面都有一个2x2的最大池化层,用于减少特征数量。然后,我们将卷积层和池化层的输出展开成一维向量,并添加两个全连接层,最后输出10个类别的概率分布。
我们使用Adam优化器和交叉熵损失函数编译模型,并在训练集上训练5个epoch。最后,我们在测试集上评估模型的准确率。
阅读全文