基于卷积神经网络的手写数字识别研究代码jupyter
时间: 2023-10-25 14:02:51 浏览: 142
基于卷积神经网络的手写数字识别
基于卷积神经网络(Convolutional Neural Network, CNN)的手写数字识别是一个常见的深度学习任务。下面是一个使用Python和Keras实现手写数字识别的Jupyter代码示例:
```python
# 导入所需的库
import numpy as np
import matplotlib.pyplot as plt
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from keras.utils import to_categorical
# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 数据预处理
x_train = np.reshape(x_train, (60000, 28, 28, 1))
x_test = np.reshape(x_test, (10000, 28, 28, 1))
x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 255
y_train = to_categorical(y_train, num_classes=10)
y_test = to_categorical(y_test, num_classes=10)
# 构建CNN模型
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(10, activation='softmax'))
# 编译与训练模型
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x_train, y_train, batch_size=128, epochs=10, validation_data=(x_test, y_test))
# 模型评估
loss, accuracy = model.evaluate(x_test, y_test)
print(f"测试集准确率:{accuracy}")
# 可视化预测结果
predictions = model.predict(x_test)
for i in range(10):
plt.imshow(x_test[i].reshape(28, 28), cmap='gray')
plt.title(f"真实值:{np.argmax(y_test[i])}, 预测值:{np.argmax(predictions[i])}")
plt.show()
```
该代码首先导入所需库,然后使用Keras的内置函数加载MNIST数据集。数据预处理部分对图像进行了归一化处理并将标签进行独热编码。然后,使用Sequential模型构建了一个简单的CNN结构。编译与训练模型部分使用交叉熵损失函数和Adam优化器进行模型训练。最后,通过evaluate函数评估模型在测试集上的准确率,并可视化预测结果。
阅读全文