手写数字识别python
时间: 2023-09-14 16:10:12 浏览: 41
手写数字识别是一个机器学习中的经典问题,可以使用Python实现。以下是一个简单的示例代码:
首先,需要导入必要的库:
```python
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow import keras
```
接下来,加载MNIST数据集:
```python
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
```
数据集包含60000个训练图像和10000个测试图像,每个图像都是28x28的灰度图像。我们可以使用Matplotlib库来可视化一些样本:
```python
plt.figure(figsize=(10,10))
for i in range(25):
plt.subplot(5,5,i+1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(x_train[i], cmap=plt.cm.binary)
plt.xlabel(y_train[i])
plt.show()
```
接下来,我们需要对数据进行预处理。我们将像素值缩放到0到1之间,并将标签转换为独热编码:
```python
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)
```
接下来,我们可以使用Keras API来定义模型:
```python
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
```
这个模型有一个输入层,一个隐藏层和一个输出层。输入层是一个Flatten层,将28x28的二维数组展平成一维数组。隐藏层是一个全连接层,有128个神经元,使用ReLU激活函数。输出层也是一个全连接层,有10个神经元,使用Softmax激活函数。
接下来,我们可以编译模型并训练:
```python
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test))
```
最后,我们可以使用测试集评估模型的性能:
```python
test_loss, test_acc = model.evaluate(x_test, y_test)
print('Test accuracy:', test_acc)
```
这只是一个简单的示例,还有很多可以优化的地方,如使用卷积神经网络等。但是,这个示例可以帮助你入门手写数字识别。